tableviewcell 中的自动布局纵横比 imageview

autolayout aspect ratio imageview in tableviewcell

我有一个自定义的 tableViewCell,里面有一个 imageView。布局如下:

我想使用自动布局来计算方法中单元格的高度

CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];

所以我设置了这样的约束

基本上这些约束只是将每个元素固定到其 superView 的边缘或视图 above/below。

问题是我还想添加一个约束,即 imageView 的纵横比。我想设置 imageView 的高度始终是其宽度的一半。如果我直接将宽高比约束设置为 2:1,我总是会收到 Unable to simultaneously satisfy constraints 错误。我尝试将优先级更改为高,但仍然没有成功。

我可以使用自动版式实现吗?

您的约束起作用并且自动高度计算正确的原因是所有 UI 元素都有自己的固有大小(使其适合其内容的大小)。

因此,imageView 的尺寸已经适合您放入其中的图像。您不能既使用固有尺寸又指定自己的尺寸(即使您只想更改其中一个尺寸)。

我看到的一个解决方案是对您的 UIImageView 设置静态高度限制,加上宽度的宽高比。然后在代码中将高度约束的常量设置为 image.size.height 值。

[self.imageHeightConstraint setConstant:self.imageView.image.size.height];
[self.view layoutIfNeeded];

通过这种方式,您可以保持一半的固有尺寸(仅高度)并获得自定义宽度。

希望我的解释有道理。如果您有任何问题,请告诉我。