Вам не нужно писать код вычисления дважды.Вы можете выполнить всю тяжелую работу в cellForRowAtIndexPath:
, а затем использовать результат, чтобы получить высоту в методе height.Например, ваш метод высоты может выглядеть так (используя несколько коротких имен, чтобы помочь ему соответствовать):
// I usually use descriptive variable names, but they won't fit on one line here.
- (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)i {
UITableViewCell *cell = [self tableView:t cellForRowAtIndexPath:i];
return cell.frame.size.height;
}
Плохая часть этого кода в том, что этот метод будет вызываться для каждой строки в вашей таблице передсначала отображается таблица (это делает ОС), которая может выглядеть как задержка в вашем приложении.Если ваши высоты меняются со временем (на ряд), то было бы хорошо иметь более быстрый способ вычисления высоты, что, да, намного больше работы.Однако, если ваши высоты строк всегда одинаковы (для каждой строки) с течением времени, вы можете просто кэшировать эти высоты.
Ссылка с некоторым кодом кэширования, который вы можете использовать для этого: http://bynomial.com/blog/?p=90