我正在尝试在autolayout中构建一些东西,但是scrollview使得无法做任何事情。 我希望滚动视图顶部的图像具有顶部和两侧约束,并且只是锁定了纵横比,因此底部可以根据需要进行扩展。但当我放入所有内容并更新它时,视图缩小到角落里的1x1盒子。我也尝试将尾随和前导空间设置为根视图,但这也没有用。 WTF
答案 0 :(得分:2)
要在滚动视图中使用自动布局,您必须对滚动视图的每个边缘(包括底部)都有约束。 原因是scrollviews需要知道其内容大小。
根据约束设置,滚动视图不知道它的内容大小。
此外,现在你所知道的自动布局是你想要一个具有一定比例的图像视图。如果这是在滚动视图之外,那就没关系,因为顶部和侧面的引脚会给它足够的信息来调整自身的大小。但由于滚动视图的性质,它需要更多信息。您可以添加宽度和高度约束并将其优先级设置为低,或将它们标记为占位符,但您需要为autolayout引擎提供更多信息以便计算布局。
有关UIScrollView
答案 1 :(得分:1)
正如@sdgandhi所指出的那样,在滚动视图中使用autolayout时,它至少必须有约束条件才能使其能够计算出contentSize
。
您可以愉快地将视图限制在滚动视图的顶部,左侧,右侧和底部。这告诉scrollview可滚动区域应该等于该视图的大小(但不强制视图为任何大小)。
在我看来,您想要做的是将imageview的宽度强制为屏幕的宽度。在这种情况下,您可以将imageview宽度约束为包含scrollview的视图的宽度(如果视图控制器的视图是scrollview,那么您应该使用普通UIView
作为视图控制器的视图并添加scrollview它,将滚动视图限制在它的顶部,左侧,右侧和底部)。这会强制您的图像视图与屏幕一样宽,如果contentMode
设置为保持纵横比,它将尝试使其高度适合该宽度的图像高度,反过来,它将告诉您scrollview它的可滚动区域应该是什么。