UIScrollView 和 Autolayout 防止 contentview 压缩

Posted

技术标签:

【中文标题】UIScrollView 和 Autolayout 防止 contentview 压缩【英文标题】:UIScrollView and Autolayout prevent contentview compression 【发布时间】:2015-02-11 11:09:42 【问题描述】:

在 IB 中,我有一个包含滚动视图的视图控制器。

红色视图在滚动视图内

红色视图的最小高度为 504 像素,因此在 iphone 4 上它应该滚动,在 iphone >=5 上它应该扩展和布局按钮以填充空白。

我将红色视图的约束从滚动视图的顶部、前导、尾随和底部设置为 0,并且水平和垂直居中。 我的 redview 的最小高度为 504

蓝色和绿色视图的高度相等

对于 iphone >=5 一切正常,但对于 iphone 4,红色视图被压缩为滚动视图的大小,并且按钮相互接触。

经过多次约束调整后,我想知道是否可以通过自动布局在 IB 中 100% 做我想做的事情

【问题讨论】:

【参考方案1】:

你说(强调我的:)

“我将红色视图的约束从滚动视图的顶部、前导、尾随和底部设置为 0,并且水平和垂直居中。我的红色视图的最小高度为 504”

首先,我可以看到一些冗余(粗体部分)。您的 redView 不需要垂直约束,因为您已经将它固定在滚动视图的边缘并具有定义的最小高度。

但这可能是按钮靠得更近的原因,也可能不是,这取决于其他约束条件。

您是否为按钮设置了垂直空间限制?

【讨论】:

我已经为蓝色视图设置了垂直空间限制(最小高度 12 像素)并且按钮有 60 像素的高度限制和蓝色视图的顶部和底部 0 像素 删除 redview 和滚动视图的垂直居中给了我在 iphone 4 上想要的结果,但在 iphone > 5 上,redview 没有延伸到滚动视图的底部 在最近的类似情况下,我选择将 redView 设置为“背景视图”。你考虑过那个选项吗?我的意思是,您可以尝试将 redView 放在滚动视图的“外部和后面”(在 IB 的分层视图中“在”滚动视图的“上方”)。事情会更容易控制/遵循这种方式。 或者您可以根据您希望在包含冲突解决的方案中“占上风”的限制为您的约束应用不同的优先级。

以上是关于UIScrollView 和 Autolayout 防止 contentview 压缩的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 和 Autolayout 防止 contentview 压缩

无法在 UIScrollView 和 AutoLayout 中使用 AspectFill 滚动 UIImageView

UIScrollView 和 Autolayout:ContentOffset 正在改变,但内容视图没有移动

使用 UIScrollView 和 AutoLayout 以编程方式创建控制器无法正确调整视图大小

iOS UIScrollView contentOffset 和 AutoLayout

UIScrollView AutoLayout