2016-08-09 48 views
1

Ich habe diesen Code für meine Tabelle (_filters = UITableView)UITableViewAutomaticDimension und mehrzeilige Label Ausgabe

- (void)viewDidLoad { 
    // table data set here ... 
    _filters.estimatedRowHeight = 80; 
    _filters.rowHeight = UITableViewAutomaticDimension; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [_filters reloadData]; 
} 

I Multi-Line-Label innerhalb meiner benutzerdefinierten Zelle haben. Einige Zeilen sind einzeilig, manche Zeilen mehrzeilig. Ich verwende Einschränkungen. Es funktioniert gut, aber was ist Problem:

Wenn ich öffnen Sie die Steuerung, Tabelle zeigt für eine Weile alt nicht richtig bemessen Zellen-Layout, dann nach einer Weile wird das richtige Layout angezeigt. Wahrscheinlich, weil die Tabellendaten in viewDidLoad gesetzt sind und dann die Tabelle in viewDidAppear neu geladen wird.

Aber:

1) Wenn ich reload von viewDidAppear entfernen, Layout richtigen Zellen nicht wiedergegeben wird (es sei denn, die Tabellenzellen werden aus dem Bildschirm gescrollt)

2) Wenn ich den Code aus viewDidLoad gestellt viewDidAppear, dasselbe Problem wie oben. Das korrekte Zellenlayout wird nicht gerendert.

So, jetzt habe ich richtig Zellen gemacht Layout, aber für wie 1-2 sec ich altes schlechten Zellen-Layout zu sehen, so dass es hässlich aussieht ..

Ich habe alles versuchte der folgenden Anrufe in cellForRowAtIndexPath zu setzen, zu haben das richtige Layout noch bei der ersten Belastung, aber nichts hat funktioniert.

//[cell setNeedsUpdateConstraints]; 
//[cell updateConstraintsIfNeeded]; 
//[cell setNeedsLayout]; 
//[cell layoutIfNeeded]; 

Jede Lösung? Dank ..

Problem ist sowohl auf iOS8/9.

+1

diese Methode und Label Linie auf 0 func gesetzt Tableview hinzuzufügen! (Die fehlende Methode hat es behoben) –

+0

Hallo Chirag, es hat funktioniert danke - (NSIndexPath: UITableView, estimatedHeightForRowAtIndexPath indexPath Tableview) – luky

+0

@Chirag, fügen Sie hier Ihren Kommentar als Antwort hinzu, damit die Leute es als hilfreich empfinden. –

Antwort

1

1. gemäß der Chirag Kommentar, fügen Sie diese UITableViewDelegateMethod Methode

 func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension 
     } 

Versuch zu laufen und zu überprüfen. Wenn das nicht funktioniert, dann führe die obige Methode aus und versuche dann die folgenden Schritte.

2.Remove die bevorzugte Breite/die explizite Inhalt Breite des Etiketts in der Storyboard/XIB.

enter image description here

Kredit geht

Siehe dieses Tutorial useyourloaf:

http://useyourloaf.com/blog/self-sizing-table-view-cells/

http://openradar.appspot.com/17799811

Beispiel: https://github.com/kharrison/CodeExamples/tree/master/SelfSize

> CGFloat { return UITableViewAutomaticDimension }
+0

Hallo, danke für deine Antwort. Ich wusste nicht einmal, dass es explizite Breite auf dem Storyboard gibt.Mein Label hat dies nicht überprüft, aber danke für Ihre Antwort und Informationen, ich werde mich daran erinnern. – luky

+1

Ich hoffe, dass das Hinzufügen von func tableView (tableView: UITableView, geschätztHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {return UITableViewAutomaticDimension} und das Entfernen der expliziten Breite, wenn es für Label existiert, für Ihre Frage funktioniert. Ich habe etwas aus deiner Frage gelernt. Danke, Mann. –

+0

ja es hat funktioniert, danke – luky