设备方向更改时,iOS自动布局约束违规

问题描述 投票:0回答:1

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

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

enter image description here

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

布局在视觉上有效;只要我忽略警告。

布局由两个基本部分组成,一个控制部分(使用UIStackView占设备高度的30%)和一个填充剩余区域的UITableView。这些嵌入在UIStackView中,设置为覆盖默认的UIView,边缘到安全区域。

enter image description here

为了充分利用可用的屏幕空间,当设备旋转到横向时,控制部分应该从UITableView上方到达它旁边,并占据屏幕宽度的45%。

冲突约束在视图的“控制器”部分,将其前沿设置为距离超视图前沿16个点。

有没有可以绕过这个?我也不喜欢,但警告可以被忽略吗?

我已经尝试将主要的UIStackView嵌入UIView并删除冲突中的约束;但是除非我在UIViewUIStackView之间添加约束,然后它们具有相同的冲突约束问题,否则他会导致其他问题。

可以找到at的具有相同问题的示例项目的回购。

当简化布局时,我似乎无法使用UIStackViewAlignment = FillDistribution = Fill Equally(或标准间距)的Spacing = 5,因为UIStackView上的间距似乎是。在冲突中

ios autolayout nslayoutconstraint uistackview size-classes
1个回答
1
投票

在使用Vary for Traits时,通常会看到这些类型的约束警告。

你可以通过改变PriorityInfo Stack View上的比例约束上的999来消除旋转上的约束冲突。

当我运行你的实验应用程序时,我也看到你的Detail Stack View上的约束冲突...但是,它看起来像你可能无法摆脱的内部冲突。将堆栈视图的Distribution更改为Fill Equally而不是Fill Proportionally会将其清除,但这可能无法为您提供所需的确切布局。

Fill Proportionally似乎是最容易被误解和误用的设置......我建议修改你的布局以避免这种情况......可能是将Detail Stack View嵌入UIViewDistribution: Fill,并将其限制在UIView的中心。

© www.soinside.com 2019 - 2024. All rights reserved.