2

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

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

我已经设置了这个没有运气:

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

在 cellForRowAt 中也是如此:

cell.setNeedsLayout()
cell.layoutIfNeeded()

任何建议都很受欢迎。

谢谢你。

在此处填充纵横比的图像

约束

4

2 回答 2

0

你需要创建这些约束,这里的纵横比是 3:1 你可以根据你的改变它,当你将 contentMode 设置为 aspectFit 时,真实的图像应该有相同的纵横比来完全拉伸

在此处输入图像描述

编辑:

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

在此处输入图像描述

然后挂钩高度约束并cellForRowAt在您从缓存下载/获取后执行此操作

cell.imageHeight.constant = imageRealHeight * imageCellWidth / imageRealWidth
于 2018-08-01T11:44:40.790 回答
0

这是由于图像视图返回它的方式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

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

于 2018-08-01T12:14:24.213 回答