Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改设备方向时iOS自动布局约束冲突_Ios_Autolayout_Nslayoutconstraint_Uistackview_Size Classes - Fatal编程技术网

更改设备方向时iOS自动布局约束冲突

更改设备方向时iOS自动布局约束冲突,ios,autolayout,nslayoutconstraint,uistackview,size-classes,Ios,Autolayout,Nslayoutconstraint,Uistackview,Size Classes,我有一个在纵向模式下为iPhone创建的自动布局 当我将设备从纵向旋转到横向时,我收到一条警告,说系统不能同时满足两个约束条件。这发生在向两个方向旋转和从两个方向旋转时 我相信我已经发现了有问题的约束(下面突出显示),它是由iOS生成的,移动冲突的约束会破坏我的布局并导致更多的约束冲突错误 布局在视觉上起作用;只要我不理会警告 布局由两个基本部分组成,一个控制部分(使用设备高度的30%的UIStackView)和一个填充剩余区域的UITableView。它们嵌入在UIStackView中,该视

我有一个在纵向模式下为iPhone创建的自动布局

当我将设备从纵向旋转到横向时,我收到一条警告,说系统不能同时满足两个约束条件。这发生在向两个方向旋转和从两个方向旋转时

我相信我已经发现了有问题的约束(下面突出显示),它是由iOS生成的,移动冲突的约束会破坏我的布局并导致更多的约束冲突错误

布局在视觉上起作用;只要我不理会警告

布局由两个基本部分组成,一个控制部分(使用设备高度的30%的
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。请随意查看,以消除无关的约束。谢谢,我已经合并了它。我认为消除不必要的限制是好的,减少冲突的可能性:)你是对的,它确实打乱了我的布局;但至少它是乱七八糟的:)谢谢