我有tableViewCell
,其中包含ImageView
。ImageView
的图片是从网址下载的,因此每张图片的高度都各不相同。
所以我使用下面的代码更改ImageView
的高度以显示不同高度的图像:
tableViewCell
课程:
let imageUrl = URL(string :"My url dynamic from API which different for every cell")
if let data = try? Data(contentsOf: imageUrl!)
{
guard let actualImage: UIImage = UIImage(data: data) else{
//do other thing here
}
let imageHeight = actualImage.size.height * actualImage.scale
defaultItemImageHeightContrainst = ItemImageHeightContrainst.constant
itemImageHeightContrainst.constant = imageHeight
itemImageView.translatesAutoresizingMaskIntoConstraints = false
layoutIfNeeded()
//kingfisher
itemImageView.kf.setImage(with: imageUrl)
}
通过使用上面的代码,我可以动态地改变ImageView
的高度,但imageHeight
的值(如上所述)总是816,2520(这是非常高的),它产生输出下面:
正如您所看到的,由于图片不够高,因此留下了很多空白。因为我希望我的Image
处于Aspect Fit
模式。
完成所有搜索后,我使用this answer中的以下代码设置imageView
中tableViewCell
的宽度和高度。如果imageView
,这可以减少空格,但是当我滚动tableView
tableView
非常滞后
调整imageView大小的新方法
func imageSizeAspectFit(imgview: UIImageView ,image : UIImage) -> CGRect {
var newwidth: CGFloat
var newheight: CGFloat
//let image: UIImage = imgFeed.image!
if image.size.height >= image.size.width {
newheight = imgview.frame.size.height;
newwidth = (image.size.width / image.size.height) * newheight
if newwidth > imgview.frame.size.width {
let diff: CGFloat = imgview.frame.size.width - newwidth
newheight = newheight + diff / newheight * newheight
newwidth = imgview.frame.size.width
}
}
else {
newwidth = imgview.frame.size.width
newheight = (image.size.height / image.size.width) * newwidth
if newheight > imgview.frame.size.height {
let diff: CGFloat = imgview.frame.size.height - newheight
newwidth = newwidth + diff / newwidth * newwidth
newheight = imgview.frame.size.height
}
}
print(newwidth, newheight)
//adapt UIImageView size to image size
let screenSize: CGRect = UIScreen.main.bounds
return CGRect(x: 0, y: 0,width: screenSize.width, height: newheight)
}
所以我的问题是:
1)根据从a下载的图像的实际高度,使用ImageView
模式更改AspectFit
的高度的正确方法是什么?
网址?
2)如果上面的调整imageView 部分的新方法中的代码是 正确的方法那么滚动时如何使tableView不滞后?