只有 imageView 的自适应表格视图单元格

Self-sizing tableview cell with only imageView

我正在努力解决以下问题: 我有一个 TableViewController,其中每个单元格只有一个 imageView。它对单元格的 contentView 的边距使用 autolayout,并设置为 aspectFit。 我想要的是根据 imageView 的高度调整单元格的高度。 在第一个屏幕截图中,您可以看到第一张图片两侧和第二张图片顶部(以及底部 - 第二张屏幕截图)的空白。

注意:我的图片的纵横比是可变的。

我已经设置好了,但运气不好:

self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 300

在 cellForRowAt 中也是这样:

cell.setNeedsLayout()
cell.layoutIfNeeded()

任何建议都很受欢迎。

谢谢。

Images with aspect fill here

The constraints

你需要创建这些约束,这里的宽高比是3:1你可以根据你的改变它,而且当你将contentMode设置为aspectFit[=14=时,真实图像应该具有相同的宽高比以完全拉伸]

编辑:

如果方面是可变的,那么您需要这些约束

然后挂钩高度限制并在 cellForRowAt 下载/从缓存

中获取后执行此操作
cell.imageHeight.constant = imageRealHeight * imageCellWidth / imageRealWidth

这是由于图像视图的方式 returns 它是 intrinsicContentSize。我目前认为这是一个错误,应该更改。我已经为此提出了一个雷达。

当您将图像放入具有 .scaleAspectFit 且对一维(宽度或高度)有约束的图像视图时。

然后它将缩小图像。

因此,如果您从 300x300 的图像开始并将其放入宽度约束为 100 的图像视图中,那么您将获得 100 点宽的图像视图。

但是,图像视图为 intrinsicContentSize 使用未缩放的图像,因此它需要 300 点高。

这就是你现在面临的问题。

目前唯一的解决方法是计算图像的纵横比并手动将其设置为图像视图的约束。

所以你可能有这样一行...

imageView.image = theImage

您可以添加以添加纵横比约束...

imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor, multiplier: image.size.height / image.size.width).isActive = true

当然,您还需要删除所有已添加的约束。或者可能将约束创建为单元格等的 属性...