UIScrollView的行为有所不同,具体取决于全屏?

时间:2014-01-19 19:24:45

标签: ios interface-builder autolayout

将自动布局约束应用于UIScrollView时,如果滚动视图布局为全屏,则会给出错误消息,但如果它具有“边距”则不会给出错误消息。我将用2个例子说明。在这两个示例中,我将前导和尾随空间应用于超视图,并将顶部和底部空间添加到布局指南。

示例1(表现得像我期望的那样。)

自动布局约束为蓝色,一切都按顺序

示例2(奇怪的行为)

我伸出滚动视图并应用与示例1中相同的规则,但现在其中一个约束最终不同。 “顶部空间到顶部布局指南”添加为“垂直空间 - (-548) - 顶部布局指南 - 滚动视图”。 然后Xcode抱怨我的滚动视图需要“y位置或高度的约束”。

任何人都可以解释为什么会这样吗?

3 个答案:

答案 0 :(得分:1)

不幸的是,我认为这是Xcode 5中Interface Builder中的一个错误。当您尝试从视图顶部创建约束到顶部布局指南时,IB通常(错误地)从底部添加约束顶部布局指南的视图。

要解决此问题,请先尝试调整scrollView的大小,使其顶部边缘在viewController中低得多:

A ViewController containing a ScrollView, which is positioned to fill the bottom half of the ViewController

然后尝试从scrollView拖动到viewController,并向顶部布局指南添加约束。然后,您可以选择此约束并在检查器中调整常量,以使scrollView与viewController的顶部对齐:

A ViewController in Interface Builder with a ScrollView filling the bottom half. An AutoLayout constraint is selected connecting the top of the ScrollView to the ViewController's top layout guide

或者,在代码中创建约束:)

答案 1 :(得分:0)

只需选择滚动视图并手动创建顶部,左侧,底部和右侧边缘的约束。

这里发生的事情是自动创建的约束没有意义,因为它们没有完全定义滚动视图的大小,只有它的位置。

答案 2 :(得分:0)

在滚动视图小于包含视图的原始示例后,我注意到XCode实际上是在我的情况下添加了一个错误的约束,当我选择“顶部空间到顶部布局指南”时,它添加了一个“底部空间”顶部布局指南“具有较大负值的约束。我可以从你的第二个截图中看到类似的东西。

我的解决方案是按照您的示例使用小于其容器的UIScrollView。然后我手动拖出约束,调整UIScrollView的大小以适应容器。最后一步是使用错误的常量来获取现在正确的约束,并将它们全部设置为0。

希望有所帮助,我仍然在努力解决我遇到的问题,但我注意到这个阶段与你发布的相似。