0

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

如何重现问题:

  1. 创建一个新的单一视图应用程序。
  2. 在情节提要中,添加一个填满整个屏幕的 UIScrollView。
  3. 添加其缺少的约束(这应该向超级视图添加 4 个约束,例如“Top Space to: Superview”)。
  4. 添加一个新的 UIView 作为 UIScrollView 的子视图。调整它的大小,使其成为一个小矩形。
  5. 选择在此框中添加缺少的约束。

您会注意到它添加了 6 个约束:

  • 4 用于尾随/前导/顶部/底部到超级视图
  • 1 表示宽度
  • 1 代表身高

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

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

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

4

1 回答 1

0

这是因为 UIScrollView 的内容大小也必须由约束确定。如果不包括最后 2 个约束,则内容大小不知道它应该有多大。

实际上,一个 UIScrollView 实际上需要 8 个约束:

假设您有一个带有单个按钮的滚动视图(或任何其他具有固有大小的视图)。

您将需要以下约束:

  • 4 用于定位滚动视图的框架。
  • 4 用于确定滚动视图的内容大小。

前四个的一个例子是:

H:|[scrollView]|
V:|[scrollView]|

(这只是设置滚动视图的框架,使其占据整个屏幕。)

最后四个的例子是:

H:|-10-[button]-10-|
V:|-10-[button]-10-|

(请注意,这些行中的每一行都创建了 2 个约束。)

假设按钮的固有大小为 50。有了这些约束,我们只需将滚动视图的内容大小设置为 70x70。

更多信息可以在这里找到

Apple 还在iOS 6 的 iOS SDK 发行说明中发布了一些关于滚动视图和自动布局行为的信息。在那里,他们描述了如何使用“纯自动布局方法”和“混合方法”使其工作。

于 2013-10-30T17:17:25.053 回答