更改设备方向后,违反iOS自动布局约束

时间:2019-04-10 18:35:53

标签: ios autolayout nslayoutconstraint uistackview size-classes

我有一个为人像模式下的iPhone创建的自动版式布局。

当我将设备从纵向旋转到横向时,会收到一条警告,提示系统无法同时满足两个约束。双向旋转时会发生这种情况。

enter image description here

我相信我已经找到了令人讨厌的约束(如下所述),它是iOS生成的约束,移动处于冲突状态的约束会破坏布局并导致更多的违反约束的错误。

布局外观直观;只要我忽略警告。

布局包含两个基本部分,一个是控制部分(使用占设备高度30%的UIStackView),另一个是填充剩余区域的UITableView。这些嵌入在UIStackView中,该{设置为覆盖默认UIView并留有安全区域的空白。

enter image description here

为充分利用设备旋转到横向时的可用屏幕空间,控制部件应从UITableView上方移至其旁边,并占据屏幕宽度的45%。 / p>

冲突的约束位于视图的“控制器”部分,将其前沿设置为距超级视图前沿16个点。

有没有办法解决这个问题?我也不喜欢,但是警告可以忽略吗?

我尝试将主UIStackView嵌入UIView中,并删除有冲突的约束;但是他会引起其他问题,除非我在UIViewUIStackView之间添加约束,然后再出现相同的冲突约束问题。

可以找到at的示例项目的回购。

简化布局时,我似乎无法使用UIStackViewAlignment = FillDistribution = Fill Equally(或标准间距)作为{{ 1}}似乎是。发生冲突。

1 个答案:

答案 0 :(得分:1)

在使用Vary for Traits时通常会看到这些类型的约束警告。

通过将Priority的两个比例约束上的Info Stack View更改为999,可以消除旋转约束冲突。

在运行您的实验应用时,我还看到您的Detail Stack View上存在约束冲突……但是,这看起来像是内部冲突,您可能无法摆脱。将堆栈视图的Distribution更改为Fill Equally而不是Fill Proportionally可以清除它,但这可能无法为您提供所需的确切布局。

Fill Proportionally似乎是最容易被误解和滥用的设置...我建议您修改布局以避免这种情况...可能是通过将Detail Stack View嵌入UIView,{ {1}},并将其约束在该Distribution: Fill的中心。