我有一个为人像模式下的iPhone创建的自动版式布局。
当我将设备从纵向旋转到横向时,会收到一条警告,提示系统无法同时满足两个约束。双向旋转时会发生这种情况。
我相信我已经找到了令人讨厌的约束(如下所述),它是iOS生成的约束,移动处于冲突状态的约束会破坏布局并导致更多的违反约束的错误。
布局外观直观;只要我忽略警告。
布局包含两个基本部分,一个是控制部分(使用占设备高度30%的UIStackView
),另一个是填充剩余区域的UITableView
。这些嵌入在UIStackView
中,该{设置为覆盖默认UIView
并留有安全区域的空白。
为充分利用设备旋转到横向时的可用屏幕空间,控制部件应从UITableView
上方移至其旁边,并占据屏幕宽度的45%。 / p>
冲突的约束位于视图的“控制器”部分,将其前沿设置为距超级视图前沿16个点。
有没有办法解决这个问题?我也不喜欢,但是警告可以忽略吗?
我尝试将主UIStackView
嵌入UIView
中,并删除有冲突的约束;但是他会引起其他问题,除非我在UIView
和UIStackView
之间添加约束,然后再出现相同的冲突约束问题。
可以找到at的示例项目的回购。
简化布局时,我似乎无法使用UIStackView
,Alignment = Fill
和Distribution = Fill Equally
(或标准间距)作为{{ 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
的中心。