0

やや奇妙な問題があります。テーブルセルのカスタム高さを備えた UITableView セットアップが既にあります。問題は、コンテンツがセルのバックグラウンドで読み込まれるときに発生します。セルをできるだけ早くロードする必要がありますが、セルごとに大きなイメージがあり、(ネットワークまたはフラッシュから) ロードするのに時間がかかる場合があるため、セルが最初にロードされるときにロードがバックグラウンドで開始されます。これは、セルの高さが最初は間違っており、後で最小限の不具合で更新する必要があることを意味します。私が抱えている問題は、テーブルや画像を常に更新する必要がなく、余分なスクロールが発生する可能性があることです。

また、信じられないほど遅いです。少し遅くするために必要な最適化がいくつかあります(メイン画像の小さなコピーを作成し、セルの高さを一時的にキャッシュします)。

私はあらゆる種類のことを試しました。テーブルがメイン スレッドで更新するように指示されていることを確認します。beginUpdates/endUpdates、reloadRows/reloadSections のベア セットを試しました (テーブルはグループ化モードで、セクションごとに 1 行です)。画像の読み込みが完了したら、テーブルを適切に更新する必要があります。

これをできるだけスムーズに機能させる方法について誰かが洞察を持っている場合は、感謝します。

4

1 に答える 1

1

行く場所はあなたのheightForRowAtIndex:方法です。画像が存在するかどうかを知り、それに応じて値を返す必要があります。各行がその画像の読み込みを完了するたびに、次のようにreloadRows〜メソッドを呼び出す必要があります。

NSArray *indexPaths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:x inSection:y]];
[self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];

これによりtableViewが大きくスクロールするかどうかは完全にはわかりませんが、これはオプションです。

別のオプションは、チャンクで更新することです。ロードされる5〜10個の画像(数に応じて)ごとに、同じ方法でそれぞれの行をリロードすると言います。

于 2012-11-23T17:45:53.673 に答える