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

And*_*Dog 23 uiscrollview ios autolayout xcode5

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

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

例

如果我用"Equade Width to Superview"限制按钮,它甚至不起作用!仍然没有占据全宽.

我该如何解决这个问题?

And*_*Dog 53

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

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

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

  • 宽度相等!太优雅了! (8认同)