Я только что обнаружил поразительную проблему или противотоком intuituve поведение при использовании estimatedHeightForRowAtIndexPathоценкамHeightForRowAtIndexPath может фактически изменить окончательную «правильную» высоту строки?
(1) Моя таблица дико различной высоты строки. Конечные результаты могут варьироваться от 111 до 400.
(2) Я абсолютно точно вычислил каждую высоту строки. У меня есть в наличии массив, то есть кешированный.
{Обратите внимание, что это именно то, что, судя по всему, инженеры компании Apple рекомендуют ... Например, пункт 5 .. Using Auto Layout in UITableView for dynamic cell layouts & variable row heights}
(3) Когда heightForRowAtIndexPath просит высоты, я дать ему абсолютно правильное высота.
(4) В какой-то мере я строю ячейку, действительно, я строю ее точно на правильную высоту (как в (2) и (3)).
{Примечание. - это, конечно, IOS, что в конце концов размеры в высоту ячейки, а не «я»}
ЭТО ВСЕ РАБОТАЕТ ОТЛИЧНО.
т. Е. Каждая ячейка построена iOS точно на высоте, указанной в heightForRowAtIndexPath.
Теперь я добавить код ...
-(CGFloat)tableView:(UITableView *)tableView
estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 120;
}
В самом деле, СТОЛ БОЛЬШЕ РАБОТЫ .................. THE ROW ВЫСОТЫ СТАТЬ СЛУЧАЙНЫМИ !!!
ЛЮБОЕ ВИДЕТЬ ЭТО НЕПРЕРЫВНОЕ ПОВЕДЕНИЕ?
Я сделал различные тесты, чтобы попытаться определить взаимосвязь того, что, по-вашему, оценилHeightForRowAtIndexPath. Сначала я подумал, что это может обеспечить нижнюю границу высоты. Итак, 150 ... даже мои меньшие ячейки будут неправильно иметь высоту 150. Но это не тот случай.
Я думаю, что МОЖЕТ делать что-то вроде этого: скажем, ваше оценочное значениеHeightForRowAtIndexPath равно 150. Иногда оно использует 150 для строк, которые (на самом деле() оказываются такими или меньше, но иногда это происходит для реального размера от heightForRowAtIndexPath.
С другой стороны, если вы указали значение для оценочногоHeightForRowAtIndexPath, которое меньше, чем когда-либо существовало (скажем, 100 в моем примере), оно в значительной степени «совершенно не работает», вы просто получаете то, что может только кажутся случайными высотами на ячейках.
очень высокие ячейки, похоже, работают правильно, возможно, что-то вроде «если высота от высотыForRowAtIndexPath удваивает оценку ated, то он использует реальную высоту «
Чтобы быть ясным, кажется, что он никогда не делает ячейку слишком маленькой, но она часто делает их слишком большими.
Чтобы быть ясным, я не, используя автозапуск, это тип ячейки, которую вы только что должны построить. (Боюсь, я понятия не имею, как это происходит с автозапуском.) Это только Xcode5/iOS7 +.
Возможно, максимальная высота может быть оценена? 400 в вашем случае. Я считаю, что делегат tableview нашел бы максимально возможный размер таблицы более полезным, чем минимальное или случайное значение между этими двумя. – KIDdAe
Не работает! Когда я использую большое значение (скажем 400), одним словом, он «перепутал больше строк». Точно так же, если я использую небольшое значение (скажем, 50), оно «испортит больше строк». Для меня совершенно таинственный. – Fattie
На самом деле это может быть, если вы установите смехотворно большое значение (2000), iOS просто «полностью проигнорирует» оценочное значение, а затем каждая строка является точной правильной высотой, как указано в heightForRowAtIndexPath ... Однако я не уверен. Удивительный и увлекательный вопрос !!! – Fattie