2017-06-21 11 views
2

私は、カスタムのUITableViewCellを持っている:再利用可能なTableViewCell非同期高さ

enter image description here

もImageUrlプロパティで(サーバから取得する)いくつかのオブジェクトを持っています。

タスク:非同期ダウンロードが必要(Kingfisher経由)。イメージが存在しない場合 - ImageViewを非表示にします。 いくつかの細かい動作しますが、:画像が(バックグラウンドで)ダウンロードを開始すると

  • 、ユーザーはまたのtableViewをスクロールすることができ、画像がダウンロードされていない場合(画像==ゼロ)、隠れImageViewの(表示/非表示を必要とします)、 scrollViewのcontentSizeが変更されました。 - 問題FIRST(スクロールジャンプ)

  • 秒:ユーザーがスクロールすると、一部のセルに画像が表示されず、このセルが再利用されると、Kingfisherは再利用されたセルの画像もダウンロードしようとします。イメージが存在する場合 - イメージビューが表示され、セルが展開されます。 再度scrollview contentSizeが変更されました。その結果、不具合が発生しました。

P.試したテーブルの使用を更新し、行を再ロードし、空のセルに別のセルも使用します。また、SOで解決策を試してみましたが、理論だけを資金提供しました:)

アイデアはありますか?

ありがとう

P.S.S.画像に基づくハードコードされたセルのサイズ(持っているかどうか)また、制約imageView(0またはxxx)も変更します。理解していれば、tableViewはセルサイズを知らないので(UITableViewAutomaticDimensionが設定されているため)

良い解決策ではありませんが、機能します。あなたの最初の問題のために

enter image description here

答えて

0

、それを解決するには2つの方法があります。スーパー高速サーバーを使用するか、arrayOfObjectsに画像の高さをプリロードすることができます。つまり、オブジェクトのリストを取得したときに、イメージがあるかどうかもチェックします。したがって、セルをロードすると、ダウンロードを待ってからイメージを表示/非表示にする必要はありません。これを行うと、スクロールが改善されるだけでなく、イメージサーバーへの呼び出しが削減されます。

2番目の問題は、オブジェクトにイメージがあるかどうかを示すフラグを配列から取得することです。画像がない場合は、サーバーからのダウンロードをやめてください。サンプルコードは次のようになります。

//itemObject now has property called loadFlag which set to true by default 

if itemObject.loadFlag { 
    //Your loading image code . If image is nil, set this flag to false 
} else { //This will prevent reused cell having image by default 
    cell.pictureView.isHidden = true 
    cell.picture = nil 
} 
+0

loadFlag - これは役に立ちません。問題は "フラグ"ではありません(これも試しました)。問題(例)画像がない最初のセル(このセルは小さい)がある場合。上にスクロールし、tableViewのセルが次のオブジェクト(配列のキューにある)と再利用されます。このオブジェクトはイメージを持っています(「フラグ」に格納されています)。 tableViewがこのイメージを再利用されたセルに設定すると、cellは展開され、scrollViewContentSizeはより大きく維持されるため、scrollViewはジャンプアーティファクトを持ちます。 –

+0

@SergeyKrasiuk私が問題1で述べたように、画像情報を持つarrayOfObjectsを取得したときに、画像があるかどうかわからない限り、セルのサイズ変更を防ぐことはできません。このダウンロードは遅延ロードなので、常にセルの高さが時間的に遅れます。ダウンロードする前にイメージがあるかどうかわからないか、ダウンロードする前にサイズを設定しない限り、サイズ変更の問題は常に発生します –

+0

イメージに基づくハードコードされたセルサイズ(持つかどうか) - 良い作品 –

関連する問題