2

我有一个习惯UITableViewCell,它有一个UIImageView. 我从互联网上提取图像以填充单元格中的图像视图,因此每个图像的纵横比可以不同。UIImageView当图像宽度大于其高度时,我想避免顶部/底部填充。

IE: 在此处输入图像描述

我也想保持纵横比不变。我有一个自定义表格视图单元格布storyboard局,约束将侧面固定到每个边距,顶部和底部。我对 UIImageView 的高度也有限制。然后我尝试根据原始图像的纵横比更改高度约束。

import UIKit
import Kingfisher
import AVFoundation

class MyTableViewCell: UITableViewCell {

@IBOutlet weak var image: UIImageView!
@IBOutlet weak var imageHeightConstraint: NSLayoutConstraint!

func populateCell(url: URL?) {

    if let imageUrl = url {
        if let url = URL(string: imageUrl) {
            image.kf.setImage(with: url, placeholder: UIImage(named: "placeholder"), options: [], progressBlock: nil, completionHandler: { (theImage, error, cacheType, url) in
                if let theImage = theImage {
                    let rect = AVMakeRect(aspectRatio: theImage.size, insideRect: CGRect(x: 0, y: 0, width: self.image.frame.width, height: 250))
                    self.imageHeightConstraint.constant = floor(rect.height)
                }

            })
        }
    }
}  
}

这第一次效果很好。我得到了原始图像,根据 UIImageViews 的宽度/高度计算出它的纵横比。但是,如果我向下滚动并返回到我的第一个图像,事情就会变得不稳定。最初 UIImageViews 框架的大小为 : (343.0, 250.0),但第二次 UIImageViews 框架为 1000/1000。

几件事:

  1. 我不确定为什么 UIImageViews 的宽度/高度是 1000/1000,看起来很奇怪。要么是细胞回收的东西,要么是设置高度约束,后来弄乱了尺寸。

  2. 我正在尝试的是否可以,这意味着它是有效的解决方案吗?UIImageView如果没有,考虑到我使用的是UITableView自动布局和自动高度,是否有一种根据图像的纵横比调整高度大小的好方法。

4

1 回答 1

0

在我的例子中,我们使用了类似Height >= 123约束的东西,并将其更改为等于(而不是大于)删除了意外的填充。

于 2021-04-05T10:07:16.580 回答