2017-08-29 1 views
0

私が書いているアプリケーションでは、MVVMを使用することにしました。 RxSwift + RxCocoaを使ってViewModelsをビューでバインドしています。今私は自分自身で解決策を見つけることができない問題に直面しています。イメージをダウンロードした後、UITableViewの行をリロードする(MVVMを使用)

私は、私がUITableViewで表示したいViewModelsのリストを持っています。 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)メソッドでは、セルをデキューしています。リストからViewModelsの1つをこのセルにバインドしています。 ViewModelにはimageUrl Variableがあり、Kingfisherを使用してこの画像をダウンロードし、その画像をImageViewに挿入します。

ここに私の問題があります:ダウンロードが完了したら、自動レイアウトが正しい高さを計算するようにこの行をリロードする必要があります。しかし、tableView.reloadRows(at: [indexPath], with: .none)を使用すると、バインディングが再作成され、無限ループ(バインディング - >イメージダウンロード完了コールバック - >リロード行 - >バインディング - > ...)が発生します。

これを回避する方法はありますか?

+0

上のこの良い例を見つけることができます! –

答えて

0

高さを計算するために、自動レイアウトの行をリロードする必要はありません(実際には絶対にしないでください)。 テーブルビューを適応的な高さに設定すると、完了です。

あなたは、コードを共有してくださいhttps://www.raywenderlich.com/129059/self-sizing-table-view-cells

+0

こんにちは。残念ながら、これは真実ではありません。画像付きの行が表示され、画像がダウンロードされても何も起こりません。私はこの行を画面からスクロールして再びスクロールしなければなりません。画像が正しく表示されます。 – Tiero

+0

@Tieroそれは本当です、私はすべてのアイテムの画像を表示するcollectionviewと巨大なプロジェクトを持っていると私たちは行をリロードすることはありません。 画像が表示されない場合は、コードが正しくないことを意味します。 –

+0

ImageViewを動作させるためにImageViewをどのように制約しますか? – Tiero

関連する問題