仅具有 imageView 的自调整 tableview 单元格 [重复]

Posted

技术标签:

【中文标题】仅具有 imageView 的自调整 tableview 单元格 [重复]【英文标题】:Self-sizing tableview cell with only imageView [duplicate] 【发布时间】:2018-08-01 11:32:59 【问题描述】:

我正在努力解决以下问题: 我有一个 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

【问题讨论】:

您为单元格上的图像视图设置的所有自动布局约束。请同时添加您的 xib 文件图像。 【参考方案1】:

您需要创建这些约束,这里的纵横比是 3:1,您可以根据自己的情况进行更改,并且真实图像应该具有相同的纵横比才能完全拉伸,因为您将 contentMode 设置为 aspectFit

编辑:

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

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

cell.imageHeight.constant = imageRealHeight * imageCellWidth / imageRealWidth

【讨论】:

好吧,我的图像具有可变的纵横比。如何以及在哪里设置? @DanielZ。看我的回答。它涵盖了如何做到这一点以及为什么需要这样做。 我面临同样的问题。我已经尝试了上述方法,但我仍然需要在单元格更新之前滚动以适应图像。【参考方案2】:

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

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

【讨论】:

以上是关于仅具有 imageView 的自调整 tableview 单元格 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

ActionBar - 具有居中 ImageView 的自定义视图,两侧的操作项

android中具有背景颜色和imageview的自定义选择器

TableCell ImageView 使用 URL 设置图像:SDWebImage:仅调整第一行的大小

Android ListView toRightOf ImageView 具有不同大小而无需调整图像大小

如何在 UITableCellView 中设置 imageView 属性以仅显示背景颜色?

Android - 将 ImageView 保存到具有全分辨率图像的文件