如何获取在aspectFit模式Swift 4中从URL下载的Image的高度?

时间:2018-01-23 11:41:35

标签: ios uiimageview uiimage swift4

我有tableViewCell,其中包含ImageViewImageView的图片是从网址下载的,因此每张图片的高度都各不相同。

所以我使用下面的代码更改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(这是非常高的),它产生输出下面:

enter image description here

正如您所看到的,由于图片不够高,因此留下了很多空白。因为我希望我的Image处于Aspect Fit模式。

完成所有搜索后,我使用this answer中的以下代码设置imageViewtableViewCell的宽度和高度。如果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不滞后?

0 个答案:

没有答案