3

一般的なアイデア

ユーザーがリストをスクロールするときにUITableViewCellsのサイズを動的に変更することを検討しています。つまり、アイテムがリストの一番下に達するとサイズが大きくなります。

考慮事項

これは、次の呼び出しが行われるときに、1秒間に複数回更新する必要があるプロセスです。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

UITableView::ReloadDataしたがって、次のように呼び出しが行われるようにアプローチすることは実用的ではありません。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

これは、大量の余分なデータをリロードし、システムの速度を大幅に低下させる必要があるためです。

ニーズ

  • 画面には約10個のアイテムが表示されます。
  • 極端な場合、リスト全体に最大100個のアイテムが含まれる場合があります。
  • システムはスムーズにスクロールする必要があります。
  • リストがスクロールすると、アイテムはリアルタイムでスムーズに拡大および縮小する必要があります。

常識

  • これは、静的アイテムを含むリストと比較して、パフォーマンスに確実に影響を与えます。

  • 「セルのサイズをテキストの長さに変更する」という単純なケースを扱うスレッドは何百もありますが、これは1秒あたりのサイクル数が多いのに比べて、1回限りのことです。

考えられるアプローチ

  • サブクラスUITableView
  • 静的UITableViewにネストしUIScrollViewます。
  • アイテムリストシステムを最初から作成し、まったく使用UIScrollViewしないでください。

破棄されたアプローチ

  • :が呼び出されるUITableView::ReloadDataように、サイクルごとに呼び出します。heightForRowAtIndexPath

ここのところ

アイテムサイズの計算を計算するモジュールをすでにコーディングしました。

結論

私はこれを解決するための最も速い方法を探していUITableViewますが、最後の手段として必要に応じて自分で再コーディングします。

御時間ありがとうございます。

4

3 に答える 3

2

で徹底的なテストを行った後UITableView、これを効率的に行う方法が見つかりませんでした。UITableView動的なセルのサイズ変更を許可しない方法で最適化されている可能性があります。このため、カスタムリストシステムを作成することが唯一のオプションのようです。私はその上にそのようなプロジェクト構築の作業を始めましたUIScrollView

基本的な機能の大部分は完了していますが、現在開発するより重要なシステムがあるため、プロジェクトは現在保留中です。このプロジェクトへの参加に興味があれば、私に知らせてください。

于 2012-07-25T19:51:47.943 に答える
0

セルのジオメトリを更新するために-[UITableViewreloadData]を呼び出す必要はありません。次を呼び出すことにより、UITableViewにセルのジオメトリを再計算させることができます。

// force geometry update
[tableView beginUpdates];
[tableView endUpdates];

これは、WWDC2010の講演で言及されました-マスタリングテーブルビュー

于 2012-07-09T19:22:38.153 に答える
0

uitableviewデリゲートデータシートのtableView:willDisplayCell:forRowAtIndexPathを確認してください。

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITableViewDelegate_Protocol/Reference/Reference.html

私は最初にテーブルセルをロードし、次にテーブルがロードまたはリロードされた後に各セルに異なることをする必要があるという同様の問題を抱えていました。あなたが探しているものかもしれません。

乾杯

于 2012-05-11T18:36:31.633 に答える