2016-09-14 2 views
1

Я разрабатываю приложение iPad, и я нашел эту проблему, почему, когда я представляю tableView, метод heightForRowAtIndexPath называется более чем одним раз для каждой строки?Сколько раз высотаForRowAtIndexPath вызывается перед представлением? Презентация? Objective-c

Например, если у меня есть десять строк, метод будет вызван 30 раз.

+0

этот метод вызывает прокрутку прокрутки, что этот вызов метода означает, что вы показываете общий вызов времени строки после того, как вы прокрутите этот вызов метода. –

+0

Почему это проблема? Методы делегатов вызываются так часто, как считает делегат (табличный вид). – Avi

+0

Потому что, если у меня есть 3 строки без проблем, но если у меня есть 10000 строк? – apollo9

ответ

2

В отличие от numberOfSectionsInTableView, который вызывается один раз, и numberOfRowsInSection, который вызывается один раз для каждого раздела, вызывается для каждой строки heightForRowAtIndexPath. Как правило, компонент должен выяснить, сколько строк ему нужно создать (что соответствует количеству ячеек ячеек, которые ему нужно выделить), поэтому он продолжает звонить heightForRowAtIndexPath, пока общая высота не будет достаточной для покрытия области экрана, плюс несколько больше строк для прокрутки.

В вашей ситуации это выглядит так, что экран достаточно высок, чтобы соответствовать 30 рядам вашего стола; следовательно, вы получаете тридцать звонков до heightForRowAtIndexPath. За этими вызовами последует примерно столько же звонков, сколько cellForRowAtIndexPath.

0

Каждый раз, когда отображается представление таблицы, он вызывает tableView:heightForRowAtIndexPath: делегата для каждой из его строк. поэтому, если вы прокрутите свой табличный вид, тогда этот метод вызывается, когда система макетирует вашу ячейку, а затем этот метод вызывается.

Refer apple documentation,

Метод позволяет делегат указать строки с различной высоты. Если этот метод реализован, возвращаемое значение переопределяет значение, указанное для свойства rowHeight для UITableView для данной строки.

Есть последствия для использования для использования tableView: heightForRowAtIndexPath: вместо свойства rowHeight. Каждый раз, когда отображается представление таблицы, он вызывает tableView: heightForRowAtIndexPath: на делегате для каждой из его строк , что может привести к существенной проблеме производительности с таблицами , имеющими большое количество строк (приблизительно 1000 или более) ,

Итак, лучше не применять этот метод, если слишком много строк!

Смежные вопросы