estimatedHeightForRowAtIndexPath pode, de fato, alterar a altura final "correta" de uma linha?

Acabei de descobrir um problema impressionante ou um comportamento contra-intuitivo ao usar estimatedHeightForRowAtIndexPath

(1) Minha mesa tem alturas de fileira variadas. Os resultados finais podem variar de 111 a cerca de 400.

(2) Eu absolutamente perfeitamente calcular a altura de cada linha. Eu tenho estes em mãos em uma matriz, ou seja, em cache.

{Note que isso é exatamente o que, aparentemente, os engenheiros da Apple agora recomendam ... exemplo, ponto 5 ..Usando Auto Layout no UITableView para layouts de célula dinâmica e alturas de fileiras variáveis}

(3) Quando heightForRowAtIndexPath pede uma altura, eu dou absolutamente a altura correta.

(4) Quando eu construo a célula, na verdade, eu a construo exatamente na altura correta (como em (2) e (3)).

{Nota - claro, é o iOS que finalmente dimensiona a altura de uma célula, não de "eu".}

Tudo isso funciona perfeitamente.

ou seja, cada célula é construída pelo iOS exatamente na altura indicada em heightForRowAtIndexPath.

Agora, adiciono o código ...

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

DE FATO, A MESA NÃO MAIS FUNCIONA .................. AS ALTURAS DA LINHA TORNAM-SE ALEATÓRIAS !!!

Alguém viu esse comportamento incrível?

Fiz vários testes para tentar determinar a relação do que o inferno estimado em HeightForRowAtIndexPath faz. No começo, pensei que poderia fornecer um limite inferior na altura. Então, 150 .. até minhas células menores seriam incorretamente 150 de altura. Mas esse não é o caso.

Acho que pode estar fazendo algo assim: digamos que seu valor estimadoHeightForRowAtIndexPath é 150. Às vezes é usado 150 para linhas que (na verdade () provam ser esse tamanho ou menos, mas às vezes ele vai para o tamanho real de heightForRowAtIndexPath.

Por outro lado, se você colocar um valor para estimatedHeightForRowAtIndexPath menor do que realmente existe (digamos 100 no meu exemplo) ele praticamente "não funciona" você obtém apenas o que pode parecer ser alturas aleatórias as células.

células muito altas parecem funcionar corretamente, talvez algo como "se a altura do heightForRowAtIndexPath for o dobro do estimado, então ele usa a altura real"

Para ser claro, parece que nunca faz um celular muito pequeno, mas muitas vezes o torna muito grande.

Para ser claro, eu sounão Usando autolayout, é o tipo de célula que você precisa construir. (Eu não tenho idéia de como isso acontece com o autolayout). Isso é apenas o Xcode5 / iOS7 +.

questionAnswers(2)

yourAnswerToTheQuestion