Только что обнаружил очень странное и неожиданное поведение в классе 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 Framework?