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

Ios 为什么自调整大小表视图单元格中的UIImageView具有内容模式AspectFit的原始高度?,ios,swift,uitableview,uiimageview,Ios,Swift,Uitableview,Uiimageview,我有一个带有自调整大小单元格的表格视图,其中显示图像。 图像视图的内容模式是AspectFit,因此我可以以正确的纵横比查看整个图像。 图像视图约束到superview,但也具有“最大高度”约束 当我有一个根据内容模式重新调整大小的图像,因此低于原始大小时,我希望图像视图的高度与重新调整大小的图像相同,而与原始图像不同 我有一个示例项目(见下面的屏幕截图和下载链接),您可以看到当前的行为:黄色和绿色单元格具有正确的顶部和底部空间,蓝色单元格的高度为150磅,但如果顶部和底部空间相同,则应该会更小

我有一个带有自调整大小单元格的表格视图,其中显示图像。 图像视图的内容模式是AspectFit,因此我可以以正确的纵横比查看整个图像。 图像视图约束到superview,但也具有“最大高度”约束

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

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

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


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

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


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

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


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

不幸的是,
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
}
如果让imageHeight=cell.testImageView.image?.size.height,imageHeight
但是,应用aspectFit后无法获得图像高度。获得它的唯一方法是自己实现一个自定义函数。你可以看到这个帖子:


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

不幸的是,
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
}
如果让imageHeight=cell.testImageView.image?.size.height,imageHeight
但是,应用aspectFit后无法获得图像高度。获得它的唯一方法是自己实现一个自定义函数。你可以看到这个帖子:

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