EstimatedHeightForRowAtIndexPath kann tatsächlich die endgültige "richtige" Höhe einer Zeile ändern?

Ich habe gerade ein verblüffendes Problem oder ein Verhalten entdeckt, das der Intuition entgegenwirkt, wenn EstimatedHeightForRowAtIndexPath verwendet wird

(1) Mein Tisch hat sehr unterschiedliche Zeilenhöhen. Die Endergebnisse können zwischen 111 und etwa 400 liegen.

(2) Ich berechne jede Reihenhöhe absolut perfekt. Ich habe diese in einem Array zur Hand, das heißt zwischengespeichert.

{Beachten Sie, dass dies genau das ist, was Apple-Ingenieure anscheinend jetzt empfehlen ... Beispiel, Punkt 5 ..Verwenden des automatischen Layouts in UITableView für dynamische Zellenlayouts und variable Zeilenhöhen}

(3) Wenn heightForRowAtIndexPath nach einer Höhe fragt, gebe ich ihr absolut die richtige Höhe.

(4) Wenn ich die Zelle baue, baue ich sie tatsächlich auf genau die richtige Höhe (wie in (2) und (3)).

{Hinweis - natürlich ist es iOS, das endlich die Höhe einer Zelle festlegt, nicht "ich".}

DAS FUNKTIONIERT PERFEKT.

Das heißt, jede Zelle wird von iOS auf genau der in heightForRowAtIndexPath angegebenen Höhe erstellt.

Nun füge ich den Code hinzu ...

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

TATSÄCHLICH FUNKTIONIERT DER TISCH NICHT MEHR ................ DIE REIHENHÖHEN WERDEN ZUFÄLLIG !!!

HAT JEMAND DIESES UNGLAUBLICHE VERHALTEN GESEHEN?

Ich habe verschiedene Tests durchgeführt, um herauszufinden, in welchem ​​Verhältnis zum Teufel der geschätzte Pfad von Höhe zu Zeile steht. Zuerst dachte ich, es könnte eine Untergrenze für die Höhe geben. Also, 150 ... sogar meine kleineren Zellen wären fälschlicherweise 150 cm hoch. Das ist aber nicht der Fall.

Ich denke, es KÖNNTE so etwas tun: Sagen Sie, dass Ihr EstimatedHeightForRowAtIndexPath-Wert 150 ist. Manchmal werden 150 für Zeilen verwendet, die (in der Tat () diese Größe oder weniger aufweisen, manchmal jedoch die tatsächliche Größe von heightForRowAtIndexPath.

Auf der anderen Seite, wenn Sie einen Wert für EstimatedHeightForRowAtIndexPath eingeben, der kleiner ist, als er jemals existieren wird (sagen wir 100 in meinem Beispiel), dann funktioniert das so ziemlich "überhaupt nicht" die Zellen.

Sehr hohe Zellen scheinen korrekt zu funktionieren, vielleicht etwa "Wenn die Höhe von heightForRowAtIndexPath doppelt so hoch ist wie die geschätzte, wird die tatsächliche Höhe verwendet".

Um es klar auszudrücken, es scheint, dass es eine Zelle nie zu klein macht, aber es macht sie oft zu groß.

Um klar zu sein, bin ichnicht Mit Autolayout ist dies die Art von Zelle, die Sie nur erstellen müssen. (Ich fürchte, ich habe keine Ahnung, wie das mit Autolayout geht.) Dies ist nur Xcode5 / iOS7 +.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage