我花了两天时间尝试混合和纯自动布局方法的各种解决方案,以实现在自动布局之前微不足道的滚动视图设置,现在它是官方的 - 我一定太愚蠢了。我主要在 Storyboard 中进行设置(嗯,就是这样)。
所以这是我的求助请求。
视图树:
UIView -UIView -UIView ..-UIScrollview ...-UIButton ...-UIButton ...-UIButton
按钮应该水平滚动(从左到右,反之亦然)。有人可以 让 我知道如何设置约束以使用纯自动布局实现这一目标吗???
--
我尝试了混合方法,如下所示:
UIView - UIView - UIView ..-UIScrollview ...-UIView (contentview) ....-UIButton ....-UIButton ....-UIButton
…并根据 Apple 的 TechNote为contentview和设置设置固定的宽度和高度约束。translatesAutoresizingMaskIntoConstraints按钮和滚动视图是使用约束设置的。这让滚动视图滚动(耶),但是,它滚动得太远了!据我所知,滚动宽度比我设置的内容视图翻了一番???!!!???
contentview
translatesAutoresizingMaskIntoConstraints
我也尝试了纯自动布局方法,无论contentview有无。 所有 的意见都是translatesAutoresizingMaskIntoConstraints=NO,除了self.view。按钮具有固定的宽度/高度约束,并固定到滚动视图的所有四个边缘。没有滚动。
translatesAutoresizingMaskIntoConstraints=NO
self.view
所以我完全困惑为什么我不能让它正常工作。非常感谢任何帮助,如果您需要任何其他信息,请询问!
带有解决方案的更新屏幕截图 - buttonZ 约束:
编辑@ Jamie Forrest 所以解决方案原来是最后一个按钮上的错误尾随约束。我设置的值不是 6441,而是负数,-6441。棘手的是,在情节提要中设置值时,Pin 工具栏中有两个选项:
当前画布值是负数(导致不滚动),下面的选项是正数(激活滚动)。这意味着我并不愚蠢,但我猜至少是半盲的。 虽然,为了我的辩护,XCode 没有显示“不正确”设置的错误,这不是有点令人不安吗?
再次编辑 现在这很有趣......将尾随值从 -6441(无滚动)更改为 6441 启用滚动。但是我的老朋友“太多内容大小”又回来了,导致内容大小是应有大小的两倍!获得正确内容滚动的解决方案是将尾随约束设置为零!这在 Storyboard 中工作时并不明显,但在查看 @Infinity James 的代码时,它应该是这样的。
当您将它们粘贴到此处时,很难看到您的约束的确切值和设置,所以我不确定从您的屏幕截图中哪里出错。
代替解释您的设置有什么问题,我创建了一个基本示例项目,该项目具有与您描述的非常相似的视图层次结构和约束设置。示例项目中的水平滚动按预期工作,该项目使用 Apple 在Technical Note中描述的“Pure AutoLayout”方法。
最初让 Auto Layout 与UIScrollView. 让它工作的关键是确保滚动视图中的所有项目加在一起,具有最终链接到滚动视图所有方面的约束,并有助于 AutoLayout 系统能够确定 contentSize 为滚动视图将大于其框架。看起来你试图在你的代码中这样做,但也许你有一些多余的约束使 contentSize 太小。
UIScrollView
另外值得注意的是,正如其他人提到的,使用 AutoLayout 和 UIScrollview,您不再显式设置 contentSize。AutoLayout System 根据您的约束计算 contentSize。