Swift3 具有UIimageView高度的动态collectionView

Swift3 具有UIimageView高度的动态collectionView,swift3,uiimageview,uicollectionview,flowlayout,Swift3,Uiimageview,Uicollectionview,Flowlayout,我想用swift 3显示collectionView中的图像。因此,该图像来自后端,仅包含URL,而不是图像大小。所以我想根据图像的高度动态显示单元格 我现在做的是 let url = self.myArray[indexPath.row].image let data = NSData(contentsOf:URL(string: url)!) var photo = UIImage() if (data?.length)! &

我想用swift 3显示collectionView中的图像。因此,该图像来自后端,仅包含URL,而不是图像大小。所以我想根据图像的高度动态显示单元格

我现在做的是

        let url = self.myArray[indexPath.row].image
        let data = NSData(contentsOf:URL(string: url)!)
        var photo = UIImage()

        if (data?.length)! > 0 {
            photo = UIImage(data:data! as Data)!
        }

        let boundingRect =  CGRect(x: 0, y: 0, width: width, height: CGFloat(MAXFLOAT))
        let rect  = AVMakeRect(aspectRatio: photo.size, insideRect: boundingRect)

        return rect.size.height
它还给我高度

问题是:图像是高达3MB大小的高清图像

        let data = NSData(contentsOf:URL(string: url)!)
需要很多时间,因为我有20到30张图片

有没有办法在另一个线程而不是主线程上下载图像,以便在后台继续下载图像

或者任何人都有一个更好的解决方案来从URL计算图像的高度

附言:我已经跟随了定制布局

提前谢谢。

你应该调查一下。它使用承诺异步发出请求,而不中断UI线程。您的代码看起来像这样

Alamofire.request(URL_STRING, method: .get, parameters: nil, encoding: URLEncoding.default, headers: getHeaders())
                .validate()
                .responseImage(completionHandler: {response in
                    switch response.result {
                    case .success:
                        //The image will be stored in response.data in NSData format
                        break
                    case .failure(let error):
                        //Handle errors over here
                        break
                    }
                })

让我尝试一下,我想在一个返回方法func collectionView(collectionView:UICollectionView,heightForPhotoAtIndexPath-indepath:nsindepath,withWidth:CGFloat)->CGFloat中调用它