为啥我会在不应为 size 类安装的约束上收到自动布局错误?

Posted

技术标签:

【中文标题】为啥我会在不应为 size 类安装的约束上收到自动布局错误?【英文标题】:Why do I get an autolayout error on a constraint that should not be installed for the size class?为什么我会在不应为 size 类安装的约束上收到自动布局错误? 【发布时间】:2014-09-24 17:42:30 【问题描述】:

我使用的是 ios 8。我的笔尖启用了自动布局和大小类。我在 IB 中做了两种布局,一种用于任意宽度/任意高度,一种用于任意宽度/紧凑高度。我已经在 IB 中测试了不同的方向和设备尺寸,并且在 IB 中我没有遇到约束问题。

现在当我在手机上运行该应用程序时。视图以纵向正确布局。然后我将手机旋转到横向,我得到“无法同时满足约束”。错误。当我查看冲突约束列表时,我看到一个应该为横向布局卸载的约束。旋转完成后,横向布局正确显示。

就好像 iOS 在卸载旧约束之前尝试使用新边界布置视图。这是 iOS 的已知问题吗?我需要执行一个步骤来正确支持大小类吗?

【问题讨论】:

我遇到了同样的问题!当我旋转到纵向时(在模拟器上),我得到一个冲突的约束,该约束是 not 为该尺寸类安装的!令人抓狂!我一直在重置约束——同样的错误! 一个错误恕我直言,这里有一些细节:***.com/a/35968564/3046504 【参考方案1】:

我遇到了同样的问题。非常令人沮丧!起初,我将代码添加到 willTransitionToTraitCollection:withTransitionCoordinator: 以检测 newCollection 是否是不需要约束的大小类。如果是这样,那么我设置了 constraint.active = NO。

它成功了,但我讨厌代码。我只是想,“我为什么要这样做?没有为新的大小类安装约束!”

然后我发现如果我在界面生成器中将违规约束的优先级降低到 999,我在旋转时不再在控制台中收到约束错误。 :-) 一切都好起来了。

【讨论】:

我目前也在“享受”这个问题——我想我会试试你的优先技巧。但是您知道这种性质的约束冲突是否会导致崩溃/类似问题,以及 Apple 是否会纯粹基于此拒绝应用程序? 试过了 - 它奏效了。你是公爵夫人。投赞成票。【参考方案2】:

我仍然认为这是一个 iOS 错误,但我没有时间制作示例项目来重现它。我认为这种布局的不同寻常之处在于,当手机旋转到横向时,我的图像视图会移动到完全不同的位置。

图像视图的宽度约束对于任一大小类都有不同的常量,但这会引发异常。

接下来尝试的是使用不同的宽度约束。一个是为紧凑的高度而安装的,另一个是为其他一切而安装的。即使不应该安装中断约束,这仍然会引发异常。

最后,我得到的解决方案是有两个图像视图,一个用于常规布局,一个用于紧凑高度。一次只安装一个图像视图。这没有例外,看起来完全一样。

【讨论】:

以上是关于为啥我会在不应为 size 类安装的约束上收到自动布局错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到关于复合类的消息?

为啥我会收到“从未使用过的参数 [E0392]”?

知道为啥我会收到此错误吗?

iOS自动布局:为啥不允许零乘数?

为啥我会收到此错误? “孩子未申报?

为啥我会收到“无法解析符号 'CreatePerOwinContext'”?