UIScrollView 的行为是不是因全屏而异?

Posted

技术标签:

【中文标题】UIScrollView 的行为是不是因全屏而异?【英文标题】:UIScrollView behaves different depending on fullscreen or not?UIScrollView 的行为是否因全屏而异? 【发布时间】:2014-01-19 19:24:45 【问题描述】:

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

示例 1(表现如我所料。)

自动布局约束为蓝色,一切正常

示例 2(奇怪的行为)

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

谁能解释这是为什么?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

这是正确的解决方案。请接受!顺便说一句,您还可以使用 IB 添加滚动视图并执行“重置为建议的约束”。这样,您的约束就会以正确的方式创建。【参考方案2】:

只需选择滚动视图并手动为顶部、左侧、底部和右侧创建约束。

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于UIScrollView 的行为是不是因全屏而异?的主要内容,如果未能解决你的问题,请参考以下文章

iframe 全屏而不是滚动?

UIScrollView 中的 UIImageView 不是全屏和捏缩放

UIScrollView 或 UICollectionView 中的自定义滚动行为

页面之间的 PHP 会话丢失 - 行为因服务器而异

斯威夫特 | UIViewController 不显示为 PopUp 但全屏

全屏 UIScrollView 无法正常工作