2016-09-14 2 views
1

私はiPadアプリを開発していますが、tableViewを提示すると、heightForRowAtIndexPathというメッセージが各行に複数回呼び出されているので、この問題を発見しましたか?プレゼンテーションを表示する前にheightForRowAtIndexPathが何回呼び出されていますか? Objective-c

たとえば、10行ある場合、メソッドは30回呼び出されます。

+0

このメソッド呼び出しは、スクロールビュースクロールの呼び出しで、スクロール後にこのメソッド呼び出しが表示されることを意味します。 –

+0

これはなぜ問題ですか?デリゲートメソッドは、デリゲートユーザー(テーブルビュー)が必要と判断するのと同じくらい頻繁に呼び出されます。 – Avi

+0

私は3行のprobがない場合、私は10000行を持っているので?一度に – apollo9

答えて

2

一度呼び出されると異なり、numberOfRowsInSectionはセクションごとに1回呼び出され、各行にheightForRowAtIndexPathが呼び出されます。一般に、コンポーネントは、作成する必要がある行の数(割り当てが必要な行セルの数に変換される)を調べる必要があるため、合計高さが画面の領域をカバーするのに十分な数になるまで、heightForRowAtIndexPathを呼び出し続けます。スクロールの行数を増やす

あなたの状況では、画面がテーブルの約30行に収まるくらい高いようです。したがって、あなたはheightForRowAtIndexPathに30コールを得る。これらのコールには、cellForRowAtIndexPathへの呼び出しがほぼ続きます。

0

テーブルビューが表示されるたびに、各行のデリゲートのtableView:heightForRowAtIndexPath:が呼び出されます。そのため、テーブルビューをスクロールすると、このメソッドが呼び出されます。システムがセルをレイアウトすると、このメソッドも呼び出されます。

Refer apple documentation

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

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

したがって、あまりにも多くの行がある場合は、このメソッドを実装しない方がよいでしょう。

関連する問題