Dieses allgemeine Thema wurde hier mehrfach gestellt: wie UITableViewCells mit unterschiedlichem Text und damit unterschiedlicher Höhe gerendert werden. Die kanonische Antwort lautet: Sie berechnen die Höhe in Controller-Delegaten der Tabellenansicht in heightForRowAtIndexPath mit sizeWithFont: constrainedToSize: lineBreakMode :. Später wird die Zelle gezeichnet und du verwendest bei Bedarf etwas wie [label sizeToFit] und alles funktioniert wie Magie.Mehrzeilige Texthöhe für UILabel/UITableViewCell berechnen: Unterschiedliche Ergebnisse bei der Berechnung vs tatsächlicher Zeichnung
Mein Problem: Ich bekomme für einige Zellen Wrapping, weil sizeWithFont: verschiedene Dimensionen von tatsächlichen Zeichnung zurückgibt.
Ein konkretes Beispiel:
Der Text ist dies: „! Die Leute vergessen, dass @BillGates 04.01-Zoll dicke Schiefer zurück von NEC 1993 einen sexy hatte Was auch immer in dieser Woche über Hardware wird nicht geschieht“
CGSize theSize = [text sizeWithFont:[UIFont systemFontOfSize:17.0f] constrainedToSize:CGSizeMake(310.0f, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap];
NSLog(@"calculated size for %@: %f, %f",text, theSize.width, theSize.height);
Dies gibt zurück: 306.000000, 84.000000. (ZB 4 Zeilen mit 17px Font und 4px Zeilenabstand, 21px Zeilenabstand.) Gut.
jedoch später, wenn tatsächlich die Zelle Zeichnung:
label = (UILabel *)[cell viewWithTag:3];
label.text = [NSString stringWithFormat:@"%@", text];
label.lineBreakMode = UILineBreakModeWordWrap;
label.font = [UIFont systemFontOfSize:17.0f];
CGSize labelSize;
labelSize = label.frame.size;
NSLog(@"label size before resizing: %f, %f", labelSize.width, labelSize.height);
[label sizeToFit];
labelSize = label.frame.size;
NSLog(@"label size after resizing: %f, %f for text %@", labelSize.width, labelSize.height,text);
(.. UILabel als Teil UITableViewCell von NIB geladen In IB Ich stelle es auf 310px breit)
Dies sollte zurückkehren genau gleiche Größe wie oben. Stattdessen bekomme ich 281.000000, 105.000000 als die Dimensionen nach sizeToFit aufrufen. Es sind jetzt 5 Zeilen zum Zeichnen statt 4, und der Text springt über, ich sehe den Spillover in der Benutzeroberfläche.
Also, für den gleichen Text, bekomme ich zwei verschiedene Dimensionen berechnet, und kann es nicht herausfinden. Ist es etwas mit UILabel? Hat es innere Ränder? Das passiert bei einigen Texten, aber nicht bei anderen, und ich habe es nicht auf etwas Bestimmtes über die Saiten zurückgeführt; scheint zufällig. This topic hebt hervor, dass es zwei Verarbeitungsdurchläufe gibt: Berechnen der Höhe gegenüber dem tatsächlichen Zeichnen. Das stimmt mit dem überein, was ich sehe. Aber ich verstehe nicht, was genau vorgeht oder wie es zu beheben ist.
Die Frage: Warum sehe ich zwei verschiedene berechnete Größen, und wie repariere ich es?
danke, das war, was ich gesucht habe: ** CGSize labelSize; labelSize = UILabelName.frame.size; ==> labelSize.height ** – cV2