【问题标题】:Why do I need 6 constraints when placing a view inside a UIScrollView?为什么在 UIScrollView 中放置视图时需要 6 个约束?
【发布时间】:2013-10-30 17:00:34
【问题描述】:

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

如何重现问题:

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

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

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

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

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

注意:如果您使用 UIView 而不是 UIScrollView 尝试相同的操作,那么一切都会按预期进行。

【问题讨论】:

    标签: autolayout xcode5


    【解决方案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 中发布了一些关于滚动视图和自动布局行为的信息。在那里,他们描述了如何让它与“纯自动布局方法”和“混合方法”一起工作。

    【讨论】:

      猜你喜欢
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      • 2011-06-11
      • 1970-01-01
      相关资源
      最近更新 更多