Только что обнаружил очень странное и неожиданное поведение в классе UITableView. Мне нужно последняя ячейка таблицы в моем разделе должна отличаться по высоте от других ячеек, поэтому я делаю в основном следующее:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section] - 1)
return 44;
else
return 88; //double size for all but the last row
}
Кажется довольно простым, но когда я запускаю ее, я получаю бесконечный цикл, и он вылетает. определила, что когда я вызываю numberOfRowsInSection:
, он вызывает метод моего источника данных tableView: numberOfRowsInSection:
. Это имеет смысл, поскольку метод tableView возвращает кэшированную версию значения источника данных, поэтому ему необходимо получить значение из источника данных в первый раз. Но затем он вызывает heightForRowAtIndexPath, снова передавая ему indexPath [0, 0]! И делает это безостановочно.
Я смог обойти это, используя вместо этого
[self tableView:tableView numberOfRowsInSection:indexPath.section]
(вызывая мой метод источника данных вместо метода tableView). Кто-нибудь знает, почему он это делает? Это определенное поведение? Или ошибка в структуре Apple TableView?