仅包含imageView的自定义tableview单元格

时间:2018-08-01 11:33:00

标签: ios swift xcode uitableview uitableviewautomaticdimension

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

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

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

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

这也在cellForRowAt中:

cell.setNeedsLayout()
cell.layoutIfNeeded()

任何建议都受到欢迎。

谢谢。

Images with aspect fill here

The constraints

2 个答案:

答案 0 :(得分:0)

您需要创建这些约束,此处的宽高比为3:1,您可以根据自己的需要进行更改,而且当您将contentMode设置为AspectFit时,真实图像也应具有相同的纵横比以完全拉伸

enter image description here

编辑:

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

enter image description here

然后挂钩高度限制,并在从缓存下载/获取后在cellForRowAt中进行操作

cell.imageHeight.constant = imageRealHeight * imageCellWidth / imageRealWidth

答案 1 :(得分: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

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