我的布局如下(使用AutoLayout,iPad):
UIScrollView
将superview的Top,Bottom,Leading,Trailing空间设为0. UIView
也有四个相似的约束。第二个UILabel
以编程方式将其高度设置为0(因为此处显示的屏幕超过了一个屏幕)。此外,这四个引脚约束也已从UIView
设置为UIScrollView
。
加载XIB时,此UILabel
会正确显示长行文本。但滚动不起作用。这是iPad上正在运行的应用程序的屏幕截图:
黄色背景设置为最外侧视图,灰色背景设置为UIView
。如果您在屏幕截图末尾仔细查看,则UILabel
的文字似乎溢出UIView
。
我怀疑因为UIView
无法“捕获”其子视图的大小,UIScrollView
也无法计算它的内容大小(如果滚动条的内容视图仅相等,则没有理由让滚动条工作到一个屏幕)。即使UILabel
明显是UIView
的子视图,为什么会发生这种情况呢?如果我的怀疑是正确的,如何将UIView
的高度设置为等于实际内容大小,以便我的UILabel
正确“包含”在其中?
(静态设置UIView
的高度,宽度不是一个选项。)
注意:在没有UIView
的情况下测试了XIB,在UILabel
内只测试了一个UIScrollView
(带有长文本)。现在滚动工作(因为,我认为,滚动视图可以计算其内容大小)。
NB2:我也在this SO question和this post中尝试了答案,但我的UIView
根本不会超出屏幕尺寸。 (我只关心水平滚动)
答案 0 :(得分:23)
使用文本很难解释AutoLayout问题。我遇到了同样的问题。我在这个视频中找到了解决方案。希望这对你也有帮助。
https://www.youtube.com/watch?v=UnQsFlMGDsI
此视频演示了如何创建具有一些功能的UIScrollView 屏幕顶部的视图和屏幕底部的视图 在Autolayout。 UIScrollView内容大小自动调整为 屏幕的大小或内容的大小 在较小的设备上滚动是活动的,在较大的设备上滚动 不活跃,因为它不需要。在UITextFields下面的UIButton 总是停留在屏幕的底部,一切都适用于所有 iPhone分辨率(iPhone 4/5/6 / 6 Plus)。