UIScrollView子级的尾随空间限制错误

时间:2013-09-23 07:13:52

标签: ios uiscrollview autolayout xcode5

我创建了一个全新的View Controller,然后添加了一个Scroll View作为根视图的子视图,并将“Leading / Top / Trailing / Bottom Space设置为Superview”设置为0,以便滚动视图完全填充其父视图。

然后我添加了一个按钮作为滚动视图的子项,空间限制为15到“Superview”(即滚动视图)。因此我希望按钮的间距为15到顶部/左/右边框,滚动视图的内容以“按钮底部+ 15”结束。但是按钮的宽度不正确(在Xcode 5 Interface Builder,iOS 6/7模拟器中测试):

Example

如果我用“Equade Width to Superview”限制按钮,它甚至不起作用!仍然没有占据整个宽度。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:52)

找到了一个很好的解决方案:)这种行为的原因是滚动视图使其内容视图大小适应其子视图实际需要的内容,并且不会自动填充宽度/高度。如果应填充宽度,则滚动视图必须包含至少一个填充屏幕宽度的视图。

通过这些步骤,我添加了一个宽度与滚动视图相同的视图(滚动视图本身,而不是其内容视图区域),导致我的滚动视图最终扩展到全宽,因为我还添加了约束“空间到superview 0/0/0/0“到滚动视图。

  • 假设一个具有一个根视图的空视图控制器
  • 添加滚动视图,在其上设置约束“空间到superview top / left / right / bottom = 0/0/0/0”
  • 将您的UI添加到滚动视图中,然后根据需要设置约束
  • 添加一个新视图,将其重命名为“确保滚动视图填充宽度”,具有以下约束
    • 领先/尾随/顶级空间到superview(这是滚动视图!)= 0
    • 高度为0因为我们希望它不可见,因为视图只是一个帮手
    • 重要部分:在层次结构中选择此视图和滚动视图,并将它们约束为相等的宽度。由于滚动视图受限于其超视图,因此它将获得宽度。然后,此约束确保滚动视图的内容视图也(至少)宽。