我有一个为人像模式下的iPhone创建的自动版式布局。
当我将设备从纵向旋转到横向时,会收到警告,提示系统无法同时满足两个约束。双向旋转时会发生这种情况。
我相信我已经找到了令人讨厌的约束(下面突出显示),它是iOS生成的约束,移动处于冲突状态的约束会破坏我的布局,并导致更多的违反约束的错误。
布局外观直观;只要我忽略警告。
布局由两个基本部分组成,一个控制部分(使用占设备高度30%的UIStackView
)和一个填充剩余区域的UITableView
。这些嵌入在UIStackView
中,该UIView
设置为覆盖默认UITableView
,并留有安全区域的空白。
为了在设备旋转以横向显示时充分利用可用的屏幕空间,控制部件应从UIStackView
上方移至其旁边,并占据屏幕宽度的45%。
冲突约束位于视图的“控制器”部分,将其前沿设置为距超级视图前沿16个点。
有没有办法解决这个问题?我也不喜欢,但是警告可以忽略吗?
我尝试将主UIView
嵌入到UIView
中,并删除冲突的约束;但是他会引起其他问题,除非我在UIStackView
和UIStackView
之间添加约束,然后它们具有相同的冲突约束问题。
可以找到具有相同问题的示例项目的回购at。
当简化布局时,由于Alignment = Fill
上的间距似乎很小,所以我无法使用带有Distribution = Fill Equally
,Spacing = 5
和UIStackView
(或标准间距)的。发生冲突。
最佳答案
在使用“变化特性”时,通常会看到这些类型的约束警告。
通过将两个对Priority
的比例约束的Info Stack View
更改为999
,可以消除旋转约束冲突。
当我运行实验应用程序时,我还看到Detail Stack View
上的约束冲突...但是,它看起来像是内部冲突,您可能无法摆脱。将堆栈视图的Distribution
更改为Fill Equally
而不是Fill Proportionally
将清除它,但这可能无法为您提供所需的确切布局。Fill Proportionally
似乎是最容易被理解和滥用的设置...我建议您修改布局以避免这种情况...可能是通过将Detail Stack View
嵌入到UIView
,Distribution: Fill
中并限制其居中在该UIView
中。