Просто нашел очень странное и неожиданное поведение в классе UITableView. Мне нужна последняя ячейка таблицы в моей секции, чтобы быть разной высотой от других клеток, так что я делаю в основном это:Calling numberOfRowsInSection: from heightForRowAtIndexPath
- (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 в). У кого-нибудь есть идея, почему он это делает? Это определенное поведение? Или ошибка в структуре TableView Apple?
Кажется, что внутренняя обработка Apple. Думаю, нам понадобится инженер Apple, чтобы ответить на этот вопрос. – Altealice 2010-12-08 04:02:07
не должны ли они плавать 44,0 и 88,0? – railwayparade 2011-01-11 10:09:43