为啥在 UIScrollView 中放置视图时需要 6 个约束?
Posted
技术标签:
【中文标题】为啥在 UIScrollView 中放置视图时需要 6 个约束?【英文标题】:Why do I need 6 constraints when placing a view inside a UIScrollView?为什么在 UIScrollView 中放置视图时需要 6 个约束? 【发布时间】:2013-10-30 17:00:34 【问题描述】:每当我向 UIScrollView 添加子视图时,我必须添加 6 个约束而不是 4 个。
如何重现问题:
-
创建一个新的单一视图应用程序。
在情节提要中,添加一个填满整个屏幕的 UIScrollView。
添加其缺少的约束(这应该向超级视图添加 4 个约束,例如“Top Space to: Superview)。
添加一个新的 UIView 作为 UIScrollView 的子视图。调整大小,使其成为一个小矩形。
选择在此框上添加缺少的约束。
您会注意到它添加了 6 个约束:
4 用于尾随/前导/顶部/底部到超级视图 1 表示宽度 1 表示高度如果您尝试删除宽度或高度约束,所有约束都会变为橙色。视图应该能够通过其尾随和前导约束来确定其宽度。同样,视图应该能够通过其顶部和底部约束来确定其高度。
那么为什么这 6 个都需要呢?
注意:如果您使用 UIView 而不是 UIScrollView 尝试相同的操作,那么一切都会按预期进行。
【问题讨论】:
【参考方案1】:这是因为 UIScrollView 的内容大小也必须由约束决定。如果不包括最后 2 个约束,则内容大小不知道它应该有多大。
实际上,一个 UIScrollView 需要 8 个约束:
假设您有一个带有单个按钮的滚动视图(或任何其他具有固有大小的视图)。
您将需要以下约束:
4 用于定位滚动视图的框架。 4 用于确定滚动视图的内容大小。前四个的例子是:
H:|[scrollView]|
V:|[scrollView]|
(这只是设置滚动视图的框架,使其占据整个屏幕。)
最后四个的例子是:
H:|-10-[button]-10-|
V:|-10-[button]-10-|
(请注意,这些行中的每一行都创建了 2 个约束。)
假设按钮的固有大小为 50。有了这些约束,我们只需将滚动视图的内容大小设置为 70x70。
更多信息可以found here。
Apple 还在ios SDK Release Notes for iOS 6 中发布了一些关于滚动视图和自动布局行为的信息。在那里,他们描述了如何让它与“纯自动布局方法”和“混合方法”一起工作。
【讨论】:
以上是关于为啥在 UIScrollView 中放置视图时需要 6 个约束?的主要内容,如果未能解决你的问题,请参考以下文章