Kann den Rahmen eines UILabel in einer UITableViewCell nicht ändern, wenn er zum ersten Mal erscheint (mit Autolayout)

7

Ich habe eine Prototyp-Zelle in meinem UITableView , die ein UILabel enthält. Ich möchte die Größe des Labels (und der Zelle) abhängig von der Größe des Textes im Label dynamisch ändern.

Ich erstelle die Prototyp-Zelle in cellForRowAtIndexPath wie folgt:

%Vor%

Dann hat meine ProgramDetailCell die folgende Implementierung:

%Vor%

Beim ersten Anzeigen der Zelle wird layoutSubviews aufgerufen, aber descriptionLabel wird nicht skaliert. Wenn ich jedoch in der Tabelle nach unten blättere und wieder nach oben blättere, erscheint die "wiederverwendet" -Zelle mit der richtigen Größe der Beschriftung!

Warum funktioniert es nicht beim ersten Mal, wenn die Zelle angezeigt wird - und was muss ich tun, um es zu reparieren?

Vielen Dank im Voraus!

    
theDuncs 08.01.2014, 12:51
quelle

9 Antworten

9

Wechseln Sie in Xib zur ersten Registerkarte, unter Interface Builder Document, deaktivieren Sie das Kontrollkästchen Auto Layout.

    
Yllow 01.04.2014 10:08
quelle
4

Es funktioniert nicht, weil Sie auto layout verwenden. Sie benötigen etwas auto layout Weg, um dies zu erreichen.

Hier ist die Lösung.

Schritt 1:

Lassen Sie% UILabel an den oberen und unteren Rand von UITableViewCell angeheftet werden. Sie können dies durch Interface Builder erreichen, indem Sie Vertical Constraint für UILabel von top und bottom für die Zelle verwenden. Das erhöht die Höhe von UILabel , wenn die Höhe der Zelle zunimmt oder umgekehrt.

Schritt 2:

Berechnen Sie in Ihrer UIViewController in - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath Methode die Größe von UITableViewCell .

Sie können es berechnen mit:

%Vor%

gibt jetzt das textFrame.size.height + Padding zurück, falls vorhanden.

Schritt 3:

Sie werden erreichen, was Sie wollten --- "Ändern Sie dynamisch die Größe des Etiketts (und der Zelle) abhängig von der Größe des Textes in der Etikette" nach dem Kompilieren und selbst zum ersten Mal ausgeführt wird.

    
Sarasranglt 02.12.2015 09:15
quelle
2

Nach dem Abrufen aller Daten vom Server können Sie mit dieser Methode die Höhe dieses UILabel ermitteln.

%Vor%

Und hier habe ich eine Beschreibung von measureHeightForText: gegeben. Diese Logik funktioniert in allen iOS5 , iOS6 , iOS7 .

%Vor%

Und dann aktualisieren Größe Ihres Etiketts entsprechend. Das funktioniert gut für mich. Ich benutze es.

    
Nirav 08.01.2014 13:20
quelle
1

Denn wenn layoutSubviews aufgerufen wird, ist Ihr descriptionLabel Text noch nicht gesetzt. Und wenn Sie scrollen, wird der Text festgelegt. So ist es jetzt richtig.

Ich schlage vor, dass Sie sizeToFit aufrufen, nachdem Sie den Text festgelegt haben.

%Vor%     
sunkehappy 08.01.2014 12:55
quelle
1

Rufen Sie dies in heightForRowAtIndexPath auf und berechnen Sie die Höhe manuell

%Vor%     
Jay Gajjar 08.01.2014 12:55
quelle
1

Sie können den folgenden Code verwenden:

%Vor%     
Ashutosh 08.01.2014 13:07
quelle
1

Wenn Ihre Anforderung die Höhe der Etikettenhöhe dynamisch ändert, folgen Sie dem Link unten. Wenn wir die Höhe des Etiketts ändern müssen, müssen wir auch die Zeilenhöhe ändern:

Die Größe von UILabel funktioniert nicht ganz

    
Charan Giri 08.01.2014 13:20
quelle
0

Verwenden Sie den folgenden Code für die dynamische Höhe in Zelle

festgelegt %Vor%     
Pradhyuman sinh 08.01.2014 13:21
quelle
0

Wenn Sie das automatische Layout verwenden, hat die Änderung des Rahmens keine Auswirkungen.

Stattdessen sollten Sie die Einschränkungen ändern.

    
Rachit Rawat 23.04.2016 12:00
quelle