使用AutoLayout在UIScrollView中调整UIView大小以进行滚动?

11
我有一个布局如下(使用AutoLayout,iPad):
UIScrollView 的顶部、底部、前导和后续空间都设置为0。UIView 也有相似的四个约束条件。第二个 UILabel 的高度以编程方式设置为0(因为这里显示了超过一屏幕的文本)。此外,这些四个约束也已经从 UIView 设置到 UIScrollView 中。
XIB 加载时,这个 UILabel 正确地显示长行文本。但是滚动功能不起作用。这是在 iPad 上运行的应用程序的屏幕截图:
如果您仔细查看屏幕截图的末尾,就会发现 UILabel 的文本似乎溢出了 UIView。
我怀疑是因为 UIView 无法“捕获”其子视图的大小,所以 UIScrollView 也无法计算其内容大小(如果其内容视图只等于一个屏幕,那么滚动条没有工作的理由)。即使 UILabel 明显是 UIView 的子视图,为什么会发生这种情况?如果我的猜测是正确的,我该如何将 UIView 的高度设置为实际内容大小,以便我的 UILabel 在其中得到正确的包含?
(静态设置 UIView 的高度和宽度不是选项)。

注意:测试了没有UIView而只有一个UIScrollView内部的单个UILabel(包含长文本),现在可以滚动(我想是因为滚动视图可以计算其内容大小)。

注意2:我还尝试了这个SO问题这篇文章中的答案,但我的UIView简单地无法扩展到屏幕的尺寸之外。(我只关心水平滚动)

1个回答

25

用文字来解释AutoLayout问题非常困难。我曾经遇到同样的问题。我在这个视频中找到了解决方法,希望对您有所帮助。

https://www.youtube.com/watch?v=UnQsFlMGDsI

这个视频演示了如何在Autolayout中创建一个UIScrollView,其中屏幕顶部有一些视图和屏幕底部有一个视图。UIScrollView的内容大小会自动调整为屏幕大小或内容大小,以便在较小的设备上滚动是活跃的,在较大的设备上滚动是不活跃的,因为它不需要。UITextFields下方的UIButton始终保持在屏幕底部,并且在所有iPhone分辨率上都可以正常工作(iPhone 4/5/6/6 Plus)。


7
太棒了!诀窍是在UIScrollView之外有另一个UIView,并将内部UIView的“等高度和宽度”约束设置为外部UIView。非常感谢! - Kedar Paranjape
2
救了我的一天!对于任何感兴趣的人,我将“等宽度”和“等高度”从内部UIView设置为scrollView本身。 - The Good Giant
2
到目前为止,我找到的最佳答案。 - nr5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接