iOS 10 中的自动布局增加高度并使 Y 位置为负

Posted

技术标签:

【中文标题】iOS 10 中的自动布局增加高度并使 Y 位置为负【英文标题】:Autolayout in iOS 10 increases height and makes Y position negative 【发布时间】:2016-09-16 21:47:12 【问题描述】:

我在 ios 10 和过去可以工作的自动布局的东西上玩得很开心(类似于其他人发布的关于如何设置延迟帧的内容)。

我已经解决了所有这些问题,但仍然存在一个问题。

我有一个非常复杂的视图,一个视图包含在另一个视图中,所有 4 个侧面都有约束以匹配其父视图。当所有东西都布置好后,superview 的 Y 值为 141.5,高度为 200(应该是这样)。

不幸的是,其中的视图应该有一个 Y 为 0 的 Y 值为 -141.5,高度为 341.5。这意味着内部视图太高了,并且在其上方的视图之上进行渲染。

我已经尝试了所有方法,包括设置明确的高度限制,但都被忽略了。

为什么它不留在它所属的地方?这一切都在 iOS 9 中完美运行。

【问题讨论】:

在设置约束 ***.com/a/39548367/1045672 后尝试通过 [self.view layoutIfNeeded] 强制布局 实际上,您需要将滚动视图侧面的内容限制在 iOS 10 中的滚动视图中,这与我的直觉相反。一旦我开始这样做,一切都很好。为什么你需要这样做?不知道。 在滚动视图上支持自动布局时,您不应该默认这样做吗?据我所知,这不是 iOS10 特有的。 是的,这就是文档所说的,但同样,这对我来说似乎违反直觉,并且它曾经在没有这些限制的情况下工作。对我来说,既然滚动视图的内容应该比滚动视图本身大,你怎么能约束所有的边缘? 【参考方案1】:

虽然我不能确切地说为什么会解决这个问题,但现在很好。我所做的是将一些视图和约束创建从 viewDidLayoutSubviews 移动到 viewDidLoad(只有一次带有标志)。似乎新版本的布局引擎对在游戏后期添加视图和约束不满意。

【讨论】:

以上是关于iOS 10 中的自动布局增加高度并使 Y 位置为负的主要内容,如果未能解决你的问题,请参考以下文章

自动布局:需要 y 位置或高度的约束

动态单元格高度的自动布局约束

UITableViewCell 高度自动布局在 iOS 10 上不起作用

调整 UIButton 宽度/高度 (iOS) - 如何在不禁用自动布局的情况下解决?

快速使用自动布局时为 UIView 高度设置动画

如果ios中的孩子数量增加,我如何自动增加UIView的高度