更改设备方向时iOS自动布局约束冲突
我有一个在纵向模式下为iPhone创建的自动布局 当我将设备从纵向旋转到横向时,我收到一条警告,说系统不能同时满足两个约束条件。这发生在向两个方向旋转和从两个方向旋转时 我相信我已经发现了有问题的约束(下面突出显示),它是由iOS生成的,移动冲突的约束会破坏我的布局并导致更多的约束冲突错误 布局在视觉上起作用;只要我不理会警告 布局由两个基本部分组成,一个控制部分(使用设备高度的30%的更改设备方向时iOS自动布局约束冲突,ios,autolayout,nslayoutconstraint,uistackview,size-classes,Ios,Autolayout,Nslayoutconstraint,Uistackview,Size Classes,我有一个在纵向模式下为iPhone创建的自动布局 当我将设备从纵向旋转到横向时,我收到一条警告,说系统不能同时满足两个约束条件。这发生在向两个方向旋转和从两个方向旋转时 我相信我已经发现了有问题的约束(下面突出显示),它是由iOS生成的,移动冲突的约束会破坏我的布局并导致更多的约束冲突错误 布局在视觉上起作用;只要我不理会警告 布局由两个基本部分组成,一个控制部分(使用设备高度的30%的UIStackView)和一个填充剩余区域的UITableView。它们嵌入在UIStackView中,该视
UIStackView
)和一个填充剩余区域的UITableView
。它们嵌入在UIStackView
中,该视图设置为覆盖默认的UIView
,并留有安全区域的边距
当设备旋转成横向时,为了充分利用可用的屏幕空间,控制部分应从UITableView
上方移动到它旁边,并占据屏幕宽度的45%
冲突约束位于视图的“控制器”部分,将其前缘设置为距SuperView前缘16点
有没有办法避开这件事?我也不喜欢,但是警告可以忽略吗
我已尝试将主UIStackView
嵌入UIView
并删除冲突的约束;但是,除非我在UIView
和UIStackView
之间添加约束,否则his会导致其他问题,这两个视图具有相同的冲突约束问题
可以找到具有相同问题的示例项目的回购
当简化布局时,我似乎无法像
UIStackView
上的间距那样,拥有Alignment=Fill
、Distribution=Fill
和spating=5
(或标准间距)的UIStackView
。冲突。在使用Vary for Traits时,通常会看到这些类型的约束警告
通过将Info Stack View
上两个比例约束的优先级更改为999
,可以消除旋转时的约束冲突
当我运行您的实验应用程序时,我还看到您的详细堆栈视图上存在约束冲突。。。但是,这看起来像是一个内部冲突,你可能无法摆脱。将堆栈视图的分布
更改为均匀填充
而不是按比例填充
将清除该堆栈视图,但这可能无法提供所需的确切布局
按比例填充
似乎是最容易被误解和误用的设置。。。我建议修改你的布局以避免。。。可能通过将详细堆栈视图
嵌入UIView
,分发:填充
,并将其限制在该UIView
的中心位置,您可以添加警告文本、带有约束的屏幕截图和带有UI层次结构的屏幕截图吗?与其他信息应该更容易帮助你。希望更新帮助。我将尝试组合一个示例项目,看看是否可以以更简单的形式复制它。查看示例项目,我发现您的信息堆栈视图负责发出警告。您为信息堆栈视图设置了比例高度约束,并将分布指定为按比例填充。这两者相互矛盾。因此你得到了警告(尽管老实说这是一个误导性的警告)。您可以对信息堆栈视图使用Fill
或Fill-equality
分布,并根据需要调整间距值。@Gavin我在示例项目的存储库中做了一个PR。请随意查看,以消除无关的约束。谢谢,我已经合并了它。我认为消除不必要的限制是好的,减少冲突的可能性:)你是对的,它确实打乱了我的布局;但至少它是乱七八糟的:)谢谢