2017-10-09 4 views
0

UIViewサブクラスにあり、URLから画像を動的に割り当てる私のUITableviewにロードしている別個のxibファイルで、カスタムUITableviewcell内にUIImageviewと他のいくつかのコンポーネントがあります。動的イメージURLの高さに応じて、UITableviewのカスタムセルに囲まれたUIImageviewのサイズを変更するにはどうすればよいですか?

問題は、URLから取得したイメージのサイズに応じて、UIImageviewとTableview行の高さを動的に変更することです。私は、それは魔法のように動作しますが、問題がある

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) 
} 
関連する問題