无法同时满足约束。可能以下列表中的至少一个约束是您不想要的

Posted

技术标签:

【中文标题】无法同时满足约束。可能以下列表中的至少一个约束是您不想要的【英文标题】:Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don't want 【发布时间】:2020-06-03 15:57:41 【问题描述】:

我有一个自定义 xib 文件,并试图在启动表视图时加载图片。但是我得到了这个多重约束的错误。我已经自动设置了 tableviewcell 的行高,组成 xib 视图的三个视图的总和为 408 像素。我还尝试将行高设置为 409,因为错误表示单元格为 408.333 像素,但这并没有帮助。

【问题讨论】:

可以添加约束列表吗?你的一个约束说 stackView.top == UIView.top .. 也许检查那个。 假设您的约束设置正确(如果输出看起来正确,那么您可能会这样做),将 stackView 的底部约束优先级设置为 999 - 这是一个常见问题。 将优先级更改为 999 成功!谢谢你。如果这是一个常见问题,苹果应该看看。 【参考方案1】:

这是一个常见问题,尤其是在表格视图单元格中使用UIStackViews 时。

问题在于,由于自动布局正在“做它的事”,它必须进行多次传递才能计算完整的布局。

当遇到(非固定高度)cell中的stack view时,需要处理stackView的排列子视图的各种高度,table的宽高,cell的高度。此外,因为@2x 缩放设备上的 使用 2 个像素,而在@3x 缩放设备上它使用 3 个像素,因此必须操作自动布局高度分别约为二分之一和三分之一。

我想我会说,在计算过程中的某个时刻自动布局会向控制台打印错误/警告消息,这并不奇怪。

将堆栈视图的底部约束上的 Priority 设置为 999 允许自动布局,我猜,暂时打破约束而不会发出警告。

那么……这是一个错误吗?还是不可避免?只有苹果知道。 :)

【讨论】:

以上是关于无法同时满足约束。可能以下列表中的至少一个约束是您不想要的的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式应用自动布局约束时无法同时满足约束

约束目标 c

我们如何以编程方式更改图像的约束?

使用 NSLayoutConstraints 时的警告

自动布局隐藏第一次启动的图像

UIStackView“无法同时满足约束”“压扁”隐藏视图