为什么自定义表格视图单元格中的UIImageView具有内容模式AspectFit的原始高度?

时间:2016-10-18 11:49:38

标签: ios swift uitableview uiimageview

我有一个自定义单元格的表视图,我在其中显示图像。 图像视图的内容模式是AspectFit,因此我可以以正确的宽高比查看整个图像。 图像视图被约束到超视图,但也具有最大高度约束。

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

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

enter image description here

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

不幸的是,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,以确保我的建议有效:)