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 的值,这将解决冲突问题
我有一个 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 的值,这将解决冲突问题