从UIImageView

时间:2016-10-10 01:12:33

标签: swift uitableview uiimageview kingfisher

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

IE: enter image description here

我还想保持纵横比相同。我将自定义表格视图单元格放置在故事板中,并将约束固定到每个边距以及顶部和底部。我对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。

1 个答案:

答案 0 :(得分:0)

就我而言,我们使用了类似 Height >= 123 的约束, 并将其更改为等于(而不是大于)移除了意外的填充。