11

UITableViewすべての行で呼び出されるのでheightForRowAtIndexPathはなく、表示される行でのみ呼び出されるために、それを読んだと思いました。しかし、これは私が見ているものではありません。heightForRowAtIndexPathたとえば、iPhoneの向きが変わるという単純な状況について、 何百もの電話がかかってきます。

したがって、ここでは、UITableViewwithがheightForRowAtIndexPath実装されheightForRowAtIndexPathている場合、すべての行(表示されている行だけでなく)に対して呼び出されると想定しています...これが完全に正しくない場合はお知らせください。

質問:上記の場合、パフォーマンスの問題が通常発生する前に、UITableViewheightForRowAtIndexPath実装されている場所)にいくつの行を含めることができますか?

パフォーマンスの問題を回避する方法はありますか?つまり、各行の公称/標準の高さを設定し、実装しませんheightForRowAtIndexPathが、表示されている場合にのみ各行の高さを正しく設定し、ここで正しく設定します...しかし、これを行う方法はどれですか?

4

4 に答える 4

8

ドキュメントのディスカッションセクションを見てくださいtableView:heightForRowAtIndexPath:

このメソッドにより、デリゲートはさまざまな高さの行を指定できます。このメソッドが実装されている場合、返される値は、指定された行の UITableView の rowHeight プロパティに指定された値をオーバーライドします。

rowHeight プロパティの代わりに tableView:heightForRowAtIndexPath: を使用すると、パフォーマンスに影響があります。テーブル ビューが表示されるたびに、その行ごとにデリゲートで tableView:heightForRowAtIndexPath: が呼び出されます。これにより、多数の行 (約 1000 以上) を持つテーブル ビューで重大なパフォーマンスの問題が発生する可能性があります。

したがってrowHeight、UITableView のプロパティを使用する必要があります。異なる高さが必要な場合は、 を使用する必要があるため、うまくいきませんtableView:heightForRowAtIndexPath:

私の知る限り、表示時に行の高さを変更する方法はありません。
テーブルビューは事前に正しいサイズを知っている必要があります。そうしないと、常に醜い位置シフトが発生します。

于 2011-03-16T11:12:08.463 に答える
3

私はそれに対する解決策を見つけたと思います。

iOS 7 では、apple はいくつかの新しい tableview プロパティを導入しました。それらの1つは次のとおりです。

tableView:estimatedHeightForRowAtIndexPath:

たとえば、推定行の高さを指定した場合、テーブルが表示される前に tableView:heightForRowAtIndexPath: が繰り返し呼び出されると、テーブルの可視セルに対してのみ呼び出されます。残りのセルについては、推定された高さが使用されます。

その情報のソースは次のとおりです。 0CEMQ6AEwBWoVChMINLK0xbPuxwIVCbUaCh3_nQWG#v=onepage&q=heightforrowatindexpath%20only%20for%20the%20visible%20cells&f=false

于 2015-09-11T08:09:17.200 に答える
1

パフォーマンスの問題の原因を突き止めるのに 1 時間以上費やしました。

最後に、heightForRowAtIndexPath への何百もの呼び出しも見つけたので、検索するとこのスレッドが表示されました。それは本当に迷惑です。250個のアイテムを表示するだけで、ここですでにパフォーマンスが低下します。ありがたいことに、表示したいセルはすべて同じサイズです。しかし、200 個を超えるアイテムを含む tableView に対していくつかの異なるセルを表示したい人がいると想像できます!

このりんごを直せ!

乾杯

于 2012-04-16T20:37:50.320 に答える