【发布时间】:2019-09-01 07:22:58
【问题描述】:
我有一个为 iPhone 纵向模式创建的自动布局布局。
当我将设备从纵向旋转到横向时,我收到一条警告说系统不能同时满足两个约束。当在两个方向之间旋转时会发生这种情况。
我相信我找到了有问题的约束(在下面突出显示),它是由 iOS 生成的,移动有冲突的约束会破坏我的布局并导致更多的约束违规错误。
布局在视觉上起作用;只要我忽略警告。
布局由两个基本部分组成,一个控制部分(使用一个UIStackView,即设备高度的 30%)和一个填充剩余区域的UITableView。这些嵌入在UIStackView 中,该UIStackView 设置为覆盖默认UIView,并带有安全区域的边距。
为了在设备旋转到横向时充分利用可用的屏幕空间,控制部分应从UITableView 上方移动到其旁边,并占据屏幕宽度的 45%。
冲突的约束位于视图的“控制器”部分,将其前沿设置为距父视图前沿 16 个点。
有办法解决这个问题吗?我也不喜欢,但是警告可以忽略吗?
我尝试将主要的UIStackView 嵌入到UIView 中并删除冲突的约束;但他会导致其他问题,除非我在 UIView 和 UIStackView 之间添加约束,然后它们会出现相同的冲突约束问题。
可以在at 找到具有相同问题的示例项目的存储库。
在简化布局时,我似乎无法拥有UIStackView 和Alignment = Fill、Distribution = Fill Equally 和Spacing = 5(或标准间距),因为UIStackView 上的间距似乎是。冲突。
【问题讨论】:
-
能否添加警告文本、带有约束的屏幕截图和带有 UI 层次结构的屏幕截图?附加信息应该更容易为您提供帮助。
-
希望更新有所帮助。我打算尝试整理一个示例项目,看看是否可以以更简单的形式复制它。
-
查看示例项目,我发现您的 info stack view 是造成警告的原因。您为信息堆栈视图设置了比例高度约束,并且您已将分布指定为
Fill Proportionally。这两者相互矛盾。因此,您收到了警告(尽管老实说这是一个误导性的警告)。您可以使用Fill或Fill Equally分布作为信息堆栈视图,并根据需要调整间距值。 -
@Gavin 我在您的示例项目的存储库中进行了 PR。随意检查一下,以消除无关的约束。
-
谢谢我已经合并了。我认为最好删除不需要的约束,减少冲突的机会:)
标签: ios autolayout nslayoutconstraint uistackview size-classes