estimadoHeightForRowAtIndexPath puede de hecho cambiar la altura final "correcta" de una fila?

Acabo de descubrir un problema asombroso o un comportamiento contrario a la intuición cuando utilizo estimadaHeightForRowAtIndexPath

(1) Mi mesa tiene alturas de filas muy diferentes. Los resultados finales pueden variar desde 111 hasta alrededor de 400.

(2) Absolutamente calculo perfectamente la altura de cada fila. Tengo estos a mano en una matriz, es decir, en caché.

{Tenga en cuenta que esto es exactamente lo que, aparentemente, los ingenieros de Apple ahora recomiendan ... ejemplo, punto 5 ...Uso del diseño automático en UITableView para diseños de celdas dinámicos y alturas de fila variables}

(3) Cuando heightForRowAtIndexPath pide una altura, le doy absolutamente la altura correcta.

(4) Cuando construyo la celda, de hecho, la construyo exactamente a la altura correcta (como en (2) y (3)).

{Nota: por supuesto, es iOS el que finalmente dimensiona la altura de una celda, no "yo".}

ESTO TODO FUNCIONA PERFECTAMENTE.

es decir, cada celda está construida por iOS exactamente a la altura indicada en heightForRowAtIndexPath.

Ahora, agrego el código ...

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

En realidad, la tabla ya no funciona .................. ¡LA ALTURA DE LA FILA SE CONVIERTE EN ALEATORIO!

¿ALGUIEN HA VISTO ESTE INCREÍBLE COMPORTAMIENTO?

Hice varias pruebas para tratar de determinar la relación de lo que el infierno estimaHeightForRowAtIndexPath hace. Al principio, pensé que podría proporcionar un límite inferior en la altura. Entonces, 150 ... incluso mis celdas más pequeñas serían incorrectamente 150 de altura. Pero ese no es el caso.

Creo que PODRÍA estar haciendo algo como esto: diga que su valor estimado deHeightForRowAtIndexPath es 150. A veces se usan 150 para filas que (de hecho () demuestran ser ese tamaño o menos, pero a veces va para el tamaño real de heightForRowAtIndexPath).

Por otro lado, si asigna un valor estimado de HeightForRowAtIndexPath que es más pequeño de lo que realmente existirá (por ejemplo, 100 en mi ejemplo), prácticamente "no funciona", simplemente obtiene lo que parece ser alturas aleatorias. las celdas.

las celdas muy altas parecen funcionar correctamente, tal vez algo como "si la altura de heightForRowAtIndexPath es el doble de la estimada, entonces usa la altura real"

Para ser claros, parece que nunca hace que una célula sea demasiado pequeña, pero a menudo las hace demasiado grandes.

Para ser claros soyno usando autolayout, es el tipo de celda que solo tienes que construir. (Me temo que no tengo idea de cómo va esto con el autolayout). Esto es solo para Xcode5 / iOS7 +.

Respuestas a la pregunta(2)

Su respuesta a la pregunta