いくつかの異なるセクションを持つ UITableView があります。1 つのセクションには、ユーザーがテキストを UITextView に入力するとサイズが変更されるセルが含まれています。別のセクションには、HTML コンテンツをレンダリングするセルが含まれており、高さの計算に比較的コストがかかります。
現在、ユーザーが UITextView に入力すると、テーブル ビューでセルの高さを更新するために、
[self.tableView beginUpdates];
[self.tableView endUpdates];
ただし、これにより、実際には入力された単一のセルのみを更新する必要がある場合に、テーブル内のすべてのセルの高さが再計算されます。それだけでなく、 を使用して推定高さを再計算する代わりに、表示されていないセルも含めてすべてのセルを呼び出します。tableView:estimatedHeightForRowAtIndexPath:
tableView:heightForRowAtIndexPath:
この不要な作業をすべて行わずに、単一のセルの高さだけを更新するようにテーブル ビューに要求する方法はありますか?
アップデート
私はまだこれに対する解決策を探しています。提案どおり、 を使用してみましreloadRowsAtIndexPaths:
たが、うまくいかないようです。reloadRowsAtIndexPaths:
1 行でも呼び出すと、要求した行に対してのみ呼び出されますがheightForRowAtIndexPath:
、すべての行に対して呼び出されます。cellForRowAtIndexPath:
実際、行が挿入、削除、または再ロードさheightForRowAtIndexPath:
れるたびに、テーブル セルのすべての行に対して呼び出されるように見えます。
willDisplayCell:forRowAtIndexPath:
また、セルが表示される直前に高さを計算するコードを入れてみました。これを機能させるには、計算を行った後にテーブル ビューに行の高さを再要求させる必要があります。残念ながら、[self.tableView beginUpdates]; [self.tableView endUpdates];
fromを呼び出すとwillDisplayCell:forRowAtIndexPath:
、UITableView の内部コードの奥深くで、範囲外のインデックス例外が発生します。彼らは私たちがこれをすることを期待していないと思います。
[self.tableView endUpdates]
表示されていないセルを呼び出さないのは、SDK のバグのように感じずにはいられませんestimatedHeightForRowAtIndexPath:
が、何らかの回避策を見つけようとしています。どんな助けでも大歓迎です。