2017-10-09 18 views
0

我有一個UIImageView和一些其他組件在一個單獨的xib文件中,我正在加載到我的UITableview中,該文件位於UIView子類中,並且動態分配來自URL的圖像。如何根據動態圖像URL的高度來調整UIImageView的大小,並將其放在UITableview的自定義單元格中?

現在的問題是,我想調整UIImageView和Tableview行的高度,具體取決於從URL中動態獲取的圖像大小。我得到的工作使用下面的代碼,

if let bpImageUrls = singleComponent["picture_link"]{ 
     cell.newsImage.sd_setShowActivityIndicatorView(true) 
     cell.newsImage.sd_setIndicatorStyle(.gray) 
     cell.newsImage.sd_setImage(with: URL(string: bpImageUrls as! String)) 

     let imageData = NSData(contentsOf:URL(string: bpImageUrls as! String)!) 

     let myImage = UIImage(data: imageData! as Data) 
     let aspectRatio = (myImage?.size.height)!/(myImage?.size.width)! 

     cell.imageHeightConstraint.constant = UIScreen.main.bounds.size.width * aspectRatio 
    } 

它的工作原理就像一個魅力,但問題是,這會減慢的UITableView的滾動事件,當我試圖做下載圖像異步和更新在主線程中查看,它不工作。

該視圖與像這樣的image這樣的自動佈局綁定在一起,我一直在努力。任何見解都會有所幫助。謝謝。

回答

0

當您異步加載圖像時,表格視圖已經完成單元格的佈局。只是根據圖像高度改變單元格的高度約束不會改變表格視圖中單元格的高度。

您必須在更改高度約束後使表格視圖重新計算單元格的高度。因此,當圖像加載並且單元格的高度約束髮生變化時,請通過調用以下方式告訴表格視圖以重新加載該單元格:

if let indexPath = tableView.indexPath(for: cellWithImage) { 
    tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic) 
} 
相關問題