UILabel in einer UITableViewCell mit dynamischer Höhe

8

Ich habe ein paar Probleme mit dynamischen Zeilenhöhen in einem UITableView - aber es sind nicht die Zellen, mit denen ich ein Problem habe, es ist das UILabel innerhalb der Zelle.

Die Zelle enthält nur ein UILabel, um Text anzuzeigen. Meine tableView: heightForRowAtIndexPath: passt die Größe jeder Zelle korrekt an, indem sie die Höhe der Beschriftung berechnet, die mit der Methode sizeWithFont: von NSString verwendet wird.

Ich habe eine Unterklasse von UITableViewCell, die nur die UILabel-Eigenschaft enthält, die im Storyboard verknüpft ist. Im Storyboard habe ich die Zeilen auf 0 gesetzt, so dass es so viele Zeilen wie nötig braucht, und ich habe den Zeilenumbruch auf Zeilenumbruch gesetzt.

So richte ich die Zellen ein:

%Vor%

Wenn ich das erstelle, bekomme ich meine Tabellenansicht mit der ganzen Größe der Zelle auf die richtige Höhe für ihren Inhalt, aber die Beschriftungen sind alle 1 Zeile, die nur von der Seite der Zellen läuft. Wenn ich jedoch die Tabelle scrolle, so dass die Zellen den Bildschirm verlassen, und dann zurück zu ihnen scrollen, wird ihre Beschriftung korrekt skaliert und die Zelle sieht so aus, wie ich sie ursprünglich erwartet hatte.

Ich habe auch versucht, den Beschriftungsrahmen mit der gleichen Methode zu berechnen, mit der ich die Zeilenhöhe errechne, und ich bekomme das gleiche Verhalten - es wird nicht korrekt gezeichnet, bis es vom Bildschirm abrollt und wieder anläuft / p>

Ich habe zwei Möglichkeiten gefunden, um dies zu umgehen, und auch keine akzeptablen Lösungen.

Erstens, wenn in viewDidAppear: Ich rufe reloadData in meiner Tabellenansicht auf, die Zellen und Beschriftungen zeichnen sich beim ersten Mal korrekt. Das wird für meine Situation nicht funktionieren, da ich Zellen zu dieser Tabelle hinzufügen und entfernen werde, und ich möchte nicht jedesmal reloadData aufrufen, wenn eine Zelle hinzugefügt wird.

Die zweite Problemumgehung scheint mir sehr seltsam zu sein - wenn ich die Schriftarteinstellungen auf der Standard-Systemschriftart 17 auf dem UILabel belasse, zeichnen sich die Zellen korrekt. Sobald ich die Schriftgröße ändere, kehrt es zu seinem Verhalten zurück, ein Etikett nicht korrekt zu zeichnen, bis es den Bildschirm verlässt und zurückkommt, oder ruft reloadData in der tableView auf.

Ich würde mich über jede Hilfe bei diesem hier freuen.

    
alivingston 22.01.2013, 13:49
quelle

3 Antworten

8

Am Ende habe ich das gelöst, indem ich das Label in cellForRowAtIndexPath zugewiesen / initialisiert habe. Ich bin nicht ganz sicher, warum dies eine Lösung ist - aber es scheint, dass das Problem, das ich erlebt habe, damit zu tun hat, wie Storyboard (oder wann, vielleicht?) Die Objekte innerhalb der Zelle erstellt. Wenn ich das Label in der Zelle in cellForRowAtIndexPath alloys / init initiiere, lädt und sortiert alles korrekt.

Also ... mein aktuelles Problem besteht darin, zu überprüfen, ob in der Zelle mein benutzerdefiniertes Etikett enthalten ist. Wenn dies nicht der Fall ist, weise ich das Etikett zu und setze es in die Zelle. Wenn es eine hat, wie in einer Zelle, die aus der Warteschlange genommen wurde, dann setze ich den Text in das Etikett, das bereits dort ist.

Nicht sicher, ob es die beste Lösung ist, aber es funktioniert jetzt.

    
alivingston 14.02.2013, 22:29
quelle
3

Ich habe dies gelöst, indem ich das Kontrollkästchen AutoSizing in IB deaktiviert habe. Es ist unklar, warum Auto-Layout dieses Problem verursacht hat.

    
user3034258 27.11.2013 05:35
quelle
2

Ich habe das gleiche Problem überfahren und löse es am Ende, indem ich [cell layoutIfNeeded] aufruft, bevor ich die Zelle zurückbringe

%Vor%     
Cassios Marques 17.07.2015 04:55
quelle

Tags und Links