在UIScrollView中放置视图时,为什么需要6个约束?

时间:2013-10-30 17:00:35

标签: autolayout xcode5

每当我向UIScrollView添加子视图时,我必须添加6个约束而不是4个。

如何重现问题:

  1. 创建一个新的单一视图应用程序。
  2. 在故事板中,添加一个填满整个屏幕的UIScrollView。
  3. 添加缺少的约束(这应该为superview添加4个约束,例如“Top Space to:Superview”。
  4. 添加一个新的UIView作为UIScrollView的子视图。调整大小,使其成为一个小矩形。
  5. 选择在此框中添加缺少的约束。
  6. 您会注意到它增加了6个约束:

    • 4表示尾随/领先/上/下至superview
    • 1 for width
    • 1 for height

    如果您尝试删除宽度或高度约束,则所有约束都将变为橙色。视图应该能够通过其尾随和前导约束来确定其宽度。同样,视图应该能够通过其顶部和底部约束来确定其高度。

    为什么所有这些都需要6个呢?

    注意:如果你用UIView而不是UIScrollView尝试同样的事情,那么一切都按预期工作。

1 个答案:

答案 0 :(得分:0)

这是因为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中发布了有关滚动视图和自动布局行为的一些信息。在那里,他们描述了如何使用“纯自动布局方法”和“混合方法”。