iOS Stackview 中的 10 方形 UIIMageView 在隐藏时会破坏自动布局

iOS 10 square UIIMageView in Stackview breaks Autolayout when hidden

我有一个 UITableViewCell,我认为它的布局非常简单。主要内容是一个 UIStackView(水平)。在其中我有 UIImageView 和两个 UILabel。在 UIImageView 上我有 2 个约束。一个是 1:1 的纵横比使其成为正方形,另一个是将高度限制为 55 点。 UIStackView 被固定到单元格 contentView 的所有边。

现在,当我没有要在 UIImageView 中显示的 UIImage 时,我只需调用 imageView.isHidden = true,UIStackView 就会隐藏图像。同时,在控制台上我看到 AutoLayout 中断。它告诉我它不能满足55的高度和0的宽度。

这是有道理的,因为由于宽高比,UIImageView 也希望宽度为 55。但是,在设备本身上,我没有看到任何奇怪的故障。它的行为完全符合我的预期。

所以问题是

这是一件坏事吗?我该如何用最少的代码解决这个问题?

顺便说一句,我正在使用动态高度自调整 UITableView 并让 AutoLayout 确定我的单元格的高度。可能会发生 UIImageView 是单元格的唯一内容。

这不是错误 StackView 为其 arrangedSubviews 添加了约束。当你在你的视图上调用隐藏时,在你的例子中是 imageView。 stackView 尝试将高度约束设置为 0,但您添加的高度约束与 stackView 添加的高度约束冲突。

您可以将高度限制的优先级更改为小于 1000 的值,这将解决冲突问题