使用AutoLayout调整UIScrollView中的UIView以进行滚动?

时间:2015-03-26 12:14:31

标签: ios uiview uiscrollview autolayout

我的布局如下(使用AutoLayout,iPad):

Xcode screenshot

UIScrollView将superview的Top,Bottom,Leading,Trailing空间设为0. UIView也有四个相似的约束。第二个UILabel以编程方式将其高度设置为0(因为此处显示的屏幕超过了一个屏幕)。此外,这四个引脚约束也已从UIView设置为UIScrollView

加载XIB时,此UILabel会正确显示长行文本。但滚动不起作用。这是iPad上正在运行的应用程序的屏幕截图:

enter image description here

黄色背景设置为最外侧视图,灰色背景设置为UIView。如果您在屏幕截图末尾仔细查看,则UILabel的文字似乎溢出UIView

我怀疑因为UIView无法“捕获”其子视图的大小,UIScrollView也无法计算它的内容大小(如果滚动条的内容视图仅相等,则没有理由让滚动条工作到一个屏幕)。即使UILabel明显是UIView的子视图,为什么会发生这种情况呢?如果我的怀疑是正确的,如何将UIView的高度设置为等于实际内容大小,以便我的UILabel正确“包含”在其中?

(静态设置UIView的高度,宽度不是一个选项。)

注意:在没有UIView的情况下测试了XIB,在UILabel内只测试了一个UIScrollView(带有长文本)。现在滚动工作(因为,我认为,滚动视图可以计算其内容大小)。

NB2:我也在this SO questionthis post中尝试了答案,但我的UIView根本不会超出屏幕尺寸。 (我只关心水平滚动)

1 个答案:

答案 0 :(得分:23)

使用文本很难解释AutoLayout问题。我遇到了同样的问题。我在这个视频中找到了解决方案。希望这对你也有帮助。

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

  

此视频演示了如何创建具有一些功能的UIScrollView   屏幕顶部的视图和屏幕底部的视图   在Autolayout。 UIScrollView内容大小自动调整为   屏幕的大小或内容的大小   在较小的设备上滚动是活动的,在较大的设备上滚动   不活跃,因为它不需要。在UITextFields下面的UIButton   总是停留在屏幕的底部,一切都适用于所有   iPhone分辨率(iPhone 4/5/6 / 6 Plus)。