为啥自调整大小的表格视图单元格中的 UIImageView 具有内容模式 AspectFit 的原始高度?

Posted

技术标签:

【中文标题】为啥自调整大小的表格视图单元格中的 UIImageView 具有内容模式 AspectFit 的原始高度?【英文标题】:Why UIImageView in self-sizing table view cell has original height with content mode AspectFit?为什么自调整大小的表格视图单元格中的 UIImageView 具有内容模式 AspectFit 的原始高度? 【发布时间】:2016-10-18 11:49:38 【问题描述】:

我有一个表格视图,其中包含可自行调整大小的单元格,我在其中显示图像。 图像视图的内容模式是 AspectFit,这样我就可以以正确的纵横比看到整个图像。 图像视图受限于超级视图,但也有最大高度限制。

当我有一个根据内容模式调整大小并因此低于原始大小的图像时,我希望图像视图的高度像调整大小的图像而不是原始图像。

我有一个示例项目(请参阅下面的屏幕截图和下载链接),您可以在其中看到当前行为:黄色和绿色单元格具有正确的顶部和底部空间,蓝色单元格为 150 pt 高,但应该更少相同的顶部和底部空间。在屏幕截图中,您可以看到额外的顶部和底部空间是空的。

这是我的示例项目(Swift 3):

https://www.dropbox.com/s/16i48qnm54fktdk/Test.zip?dl=0

有人知道如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

很遗憾,sizeToFit() 不适用于 UIImageView。但是,您可以将 testImageViewHeightConstraint 设置为图片的高度。

if let imageHeight = cell.testImageView.image?.size.height, imageHeight < cell.testImageViewHeightConstraint.constant 
    print(imageHeight) // this is not the correct height of your image
    cell.testImageViewHeightConstraint.constant = //your image height

但是,应用 aspectFit 后无法获取图像高度。获得它的唯一方法是自己实现一个自定义函数。你可以看这个帖子:How to know the image size after applying aspect fit for the image in an UIImageView

您可以先将testImageViewHeightConstraint.constant 设置为 50,以确保我的建议有效:)

【讨论】:

【参考方案2】:

您可以做的一件事是在 superView 的中心垂直和水平对齐 imageView,并为其分配一个虚拟的宽度和高度。为单元格内的宽度和高度约束创建出口。然后,您可以调整图像大小以适应屏幕白色的宽度,保持纵横比,并将 imageView 的高度和宽度设置为图像的大小。在heightForRowAtIndexPath 中,您必须根据调整大小后为imageView.size.height 获得的值设置单元格的高度

编辑:事后看来,这似乎是一种解决方法,也许其他人可能知道更好的方法。

【讨论】:

以上是关于为啥自调整大小的表格视图单元格中的 UIImageView 具有内容模式 AspectFit 的原始高度?的主要内容,如果未能解决你的问题,请参考以下文章

图像在表格视图单元格中下载后调整大小

如何使用自动布局来调整表格视图单元格中的视图大小?

为啥表格视图单元格中的自动布局会导致表格的内容大小被错误地更改?

在自定义单元格中调整 iOS 7.1 中的 UILabel 大小

修复表格视图单元格中的文本,ios?

自调整大小表格单元格中的 ImageView 在应用 Aspect Fit 之前使用图像的高度