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