Звучит глупо, но ... э-э ... "расположите вашу ячейку перед выходом heightForRowAtIndexPath";)
Серьезно, хотя - ОС когда-либо вызывает это, только если это необходимо (например, собирается создать ячейку и отобразить ее на экране), поэтому ее размещение и подготовка к отображению - не напрасная трата усилий. .
Обратите внимание, вы не должны делать макет отдельно, логически. Просто вызовите ваш [self prepLayoutForCellAtIndex: index] в вашей подпрограмме heightForRowAtIndexPath.
Если данные статические, вы можете создать таблицу высот и кэшировать информацию.
if (0 == heightTable[index]) {
heightTable[index] = [self prepLayoutForCellAtIndex:index];
}
return (heightTable[index]);
Черт возьми, даже если данные изменяются, вы можете либо пересчитать значение таблицы в методе, который изменяет данные, либо очистить до 0, чтобы он был пересчитан в следующий раз, когда это необходимо.