scrollview打破autolayout尾随和前导空间

时间:2015-09-02 23:08:25

标签: ios autolayout

我正在尝试在autolayout中构建一些东西,但是scrollview使得无法做任何事情。 我希望滚动视图顶部的图像具有顶部和两侧约束,并且只是锁定了纵横比,因此底部可以根据需要进行扩展。但当我放入所有内容并更新它时,视图缩小到角落里的1x1盒子。我也尝试将尾随和前导空间设置为根视图,但这也没有用。 WTF

Constraints on the scrollview to lock it to the edges

contraints on image to lock it to sides and top and aspect ratio

what happens when i update the frames

2 个答案:

答案 0 :(得分:2)

要在滚动视图中使用自动布局,您必须对滚动视图的每个边缘(包括底部)都有约束。 原因是scrollviews需要知道其内容大小。

根据约束设置,滚动视图不知道它的内容大小。

此外,现在你所知道的自动布局是你想要一个具有一定比例的图像视图。如果这是在滚动视图之外,那就没关系,因为顶部和侧面的引脚会给它足够的信息来调整自身的大小。但由于滚动视图的性质,它需要更多信息。您可以添加宽度和高度约束并将其优先级设置为低,或将它们标记为占位符,但您需要为autolayout引擎提供更多信息以便计算布局

有关UIScrollView

中自动布局的更深入技术讨论,请参阅https://developer.apple.com/library/ios/technotes/tn2154/_index.html

答案 1 :(得分:1)

正如@sdgandhi所指出的那样,在滚动视图中使用autolayout时,它至少必须有约束条件才能使其能够计算出contentSize

您可以愉快地将视图限制在滚动视图的顶部,左侧,右侧和底部。这告诉scrollview可滚动区域应该等于该视图的大小(但不强制视图为任何大小)。

在我看来,您想要做的是将imageview的宽度强制为屏幕的宽度。在这种情况下,您可以将imageview宽度约束为包含scrollview的视图的宽度(如果视图控制器的视图是scrollview,那么您应该使用普通UIView作为视图控制器的视图并添加scrollview它,将滚动视图限制在它的顶部,左侧,右侧和底部)。这会强制您的图像视图与屏幕一样宽,如果contentMode设置为保持纵横比,它将尝试使其高度适合该宽度的图像高度,反过来,它将告诉您scrollview它的可滚动区域应该是什么。