2

テーブル ビューでは、動的な高さを持つカスタム UITableViewCells を使用します。動的なテキスト ブロックだけでなく、高さの異なる画像も存在するため、レイアウト アルゴリズムは複雑です。適切な heightForRowAtIndexPath が呼び出されたとき、テーブル ビュー セルはレンダリングされていません。高さを 2 回計算する必要がありますか? heightForRowAtIndexPath に対して 1 回、cellForRowAtIndexPath に対して 1 回ですか? または、それを組み合わせる方法のパターンはありますか?

4

1 に答える 1

-2

計算コードを 2 回記述する必要はありません。すべてのハードワークを実行してcellForRowAtIndexPath:から、結果を使用して height メソッドで高さを取得できます。たとえば、height メソッドは次のようになります (収まるように短い名前を使用します)。

// I usually use descriptive variable names, but they won't fit on one line here.
- (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)i {
  UITableViewCell *cell = [self tableView:t cellForRowAtIndexPath:i];
  return cell.frame.size.height;
}

このコードの悪い点は、テーブルが最初に表示される (OS がこれを行う) 前に、このメソッドがテーブルのすべての行に対して呼び出されることです。これは、アプリでラグとして表示される場合があります。高さが時間の経過とともに (行ごとに) 変化する場合、高さを計算するためのより高速な方法があればよいでしょう。ただし、行の高さが常に同じ (行ごと) である場合は、高さをキャッシュするだけです。

これに使用できるキャッシング コードを参照してください: http://bynomial.com/blog/?p=90

于 2010-09-20T20:25:45.380 に答える