私は、カスタムのUITableViewCellを持っている:再利用可能なTableViewCell非同期高さ
もImageUrlプロパティで(サーバから取得する)いくつかのオブジェクトを持っています。
タスク:非同期ダウンロードが必要(Kingfisher経由)。イメージが存在しない場合 - ImageViewを非表示にします。 いくつかの細かい動作しますが、:画像が(バックグラウンドで)ダウンロードを開始すると
、ユーザーはまたのtableViewをスクロールすることができ、画像がダウンロードされていない場合(画像==ゼロ)、隠れImageViewの(表示/非表示を必要とします)、 scrollViewのcontentSizeが変更されました。 - 問題FIRST(スクロールジャンプ)
秒:ユーザーがスクロールすると、一部のセルに画像が表示されず、このセルが再利用されると、Kingfisherは再利用されたセルの画像もダウンロードしようとします。イメージが存在する場合 - イメージビューが表示され、セルが展開されます。 再度scrollview contentSizeが変更されました。その結果、不具合が発生しました。
P.試したテーブルの使用を更新し、行を再ロードし、空のセルに別のセルも使用します。また、SOで解決策を試してみましたが、理論だけを資金提供しました:)
アイデアはありますか?
ありがとう
P.S.S.画像に基づくハードコードされたセルのサイズ(持っているかどうか)また、制約imageView(0またはxxx)も変更します。理解していれば、tableViewはセルサイズを知らないので(UITableViewAutomaticDimensionが設定されているため)
良い解決策ではありませんが、機能します。あなたの最初の問題のために
loadFlag - これは役に立ちません。問題は "フラグ"ではありません(これも試しました)。問題(例)画像がない最初のセル(このセルは小さい)がある場合。上にスクロールし、tableViewのセルが次のオブジェクト(配列のキューにある)と再利用されます。このオブジェクトはイメージを持っています(「フラグ」に格納されています)。 tableViewがこのイメージを再利用されたセルに設定すると、cellは展開され、scrollViewContentSizeはより大きく維持されるため、scrollViewはジャンプアーティファクトを持ちます。 –
@SergeyKrasiuk私が問題1で述べたように、画像情報を持つarrayOfObjectsを取得したときに、画像があるかどうかわからない限り、セルのサイズ変更を防ぐことはできません。このダウンロードは遅延ロードなので、常にセルの高さが時間的に遅れます。ダウンロードする前にイメージがあるかどうかわからないか、ダウンロードする前にサイズを設定しない限り、サイズ変更の問題は常に発生します –
イメージに基づくハードコードされたセルサイズ(持つかどうか) - 良い作品 –