оценочныйHeightForRowAtIndexPath может фактически изменить окончательную «правильную» высоту строки?

Я только что обнаружил поразительную проблему или нелогичное поведение, когда примерил значение HeightForRowAtIndexPath

(1) Моя таблица имеет сильно различающиеся высоты строк. Окончательные результаты могут варьироваться от 111 до около 400.

(2) Я абсолютно точно рассчитываю высоту каждой строки. У меня есть эти под рукой в массиве, то есть в кеше.

{Обратите внимание, что это именно то, что, по-видимому, инженеры Apple сейчас рекомендуют ... пример, пункт 5 ..Использование Auto Layout в UITableView для динамического размещения ячеек и переменной высоты строк}

(3) Когда heightForRowAtIndexPath запрашивает высоту, я даю ей абсолютно правильную высоту.

(4) Когда я строю ячейку, действительно, я строю ее точно на правильную высоту (как в (2) и (3)).

{Примечание - конечно, iOS определяет размер ячейки, а не «я».}

ЭТО ВСЕ РАБОТАЕТ ОТЛИЧНО.

т.е. каждая ячейка построена iOS точно на высоте, заданной в heightForRowAtIndexPath.

Теперь я добавляю код ...

-(CGFloat)tableView:(UITableView *)tableView
    estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 120;
}

На самом деле, таблица больше не работает .................. ВЫСОТА РЯДА СТАНОВЯТСЯ СЛУЧАЙНОЙ !!!

Кто-нибудь видел это невероятное поведение?

Я провел различные тесты, чтобы попытаться определить, что делает ад по оценкам HeightForRowAtIndexPath. Сначала я подумал, что это может дать нижнюю границу высоты. Таким образом, 150 .. даже мои меньшие клетки были бы неправильно ростом 150. Но это не тот случай.

Я думаю, что МОЖЕТ делать что-то вроде этого: скажем, ваше оценочное значение HeightForRowAtIndexPath равно 150. Иногда оно использует 150 для строк, которые (на самом деле () оказываются равными этому размеру или меньше, но иногда это соответствует реальному размеру из heightForRowAtIndexPath.

С другой стороны, если вы введете значение для оценочного значения HeightForRowAtIndexPath, которое меньше, чем когда-либо будет существовать (скажем, 100 в моем примере), оно в значительной степени «совершенно не работает», вы просто получаете то, что может показаться случайным по высоте. клетки.

кажется, что очень высокие ячейки работают правильно, возможно, что-то вроде «если высота от heightForRowAtIndexPath в два раза превышает предполагаемую, то она использует реальную высоту»

Чтобы было ясно, кажется, что это никогда не делает клетку слишком маленькой, но часто делает их слишком большими.

Чтобы быть ясным, яне используя autolayout, это тип ячейки, который вы просто должны построить. (Боюсь, я понятия не имею, как это происходит с autolayout.) Это только Xcode5 / iOS7 +.

Ответы на вопрос(2)

Ваш ответ на вопрос