Ich verwende eine benutzerdefinierte UITableViewCell, in der einige Beschriftungen, Schaltflächen und Bildansichten angezeigt werden sollen. In der Zelle befindet sich eine Bezeichnung, deren Text ein NSString
Objekt ist und deren Länge variabel sein kann. Aus diesem Grund kann ich in der Methode von UITableView
's keine konstante Höhe für die Zelle festlegen heightForCellAtIndex
. Die Höhe der Zelle hängt von der Höhe des Etiketts ab, die mit der Methode von NSString
's sizeWithFont
bestimmt werden kann. Ich habe versucht, es zu benutzen, aber es sieht so aus, als würde ich irgendwo falsch liegen. Wie kann es behoben werden?
Hier ist der Code, der zum Initialisieren der Zelle verwendet wird.
if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier])
{
self.selectionStyle = UITableViewCellSelectionStyleNone;
UIImage *image = [UIImage imageNamed:@"dot.png"];
imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(45.0,10.0,10,10);
headingTxt = [[UILabel alloc] initWithFrame: CGRectMake(60.0,0.0,150.0,post_hdg_ht)];
[headingTxt setContentMode: UIViewContentModeCenter];
headingTxt.text = postData.user_f_name;
headingTxt.font = [UIFont boldSystemFontOfSize:13];
headingTxt.textAlignment = UITextAlignmentLeft;
headingTxt.textColor = [UIColor blackColor];
dateTxt = [[UILabel alloc] initWithFrame:CGRectMake(55.0,23.0,150.0,post_date_ht)];
dateTxt.text = postData.created_dtm;
dateTxt.font = [UIFont italicSystemFontOfSize:11];
dateTxt.textAlignment = UITextAlignmentLeft;
dateTxt.textColor = [UIColor grayColor];
NSString * text1 = postData.post_body;
NSLog(@"text length = %d",[text1 length]);
CGRect bounds = [UIScreen mainScreen].bounds;
CGFloat tableViewWidth;
CGFloat width = 0;
tableViewWidth = bounds.size.width/2;
width = tableViewWidth - 40; //fudge factor
//CGSize textSize = {width, 20000.0f}; //width and height of text area
CGSize textSize = {245.0, 20000.0f}; //width and height of text area
CGSize size1 = [text1 sizeWithFont:[UIFont systemFontOfSize:11.0f]
constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];
CGFloat ht = MAX(size1.height, 28);
textView = [[UILabel alloc] initWithFrame:CGRectMake(55.0,42.0,245.0,ht)];
textView.text = postData.post_body;
textView.font = [UIFont systemFontOfSize:11];
textView.textAlignment = UITextAlignmentLeft;
textView.textColor = [UIColor blackColor];
textView.lineBreakMode = UILineBreakModeWordWrap;
textView.numberOfLines = 3;
textView.autoresizesSubviews = YES;
[self.contentView addSubview:imageView];
[self.contentView addSubview:textView];
[self.contentView addSubview:webView];
[self.contentView addSubview:dateTxt];
[self.contentView addSubview:headingTxt];
[self.contentView sizeToFit];
[imageView release];
[textView release];
[webView release];
[dateTxt release];
[headingTxt release];
}
Dies ist das Etikett, dessen Höhe und Breite falsch sind:
textView = [[UILabel alloc] initWithFrame:CGRectMake(55.0,42.0,245.0,ht)];
quelle
Wenn alle Ihre Zeilen dieselbe Höhe haben, legen Sie einfach die
rowHeight
Eigenschaft von UITableView fest, anstatt die zu implementierenheightForRowAtIndexPath
. Apple Docs:quelle
tableView.rowHeight
gesetzt ist,heightForRowAtIndexPath
nicht aufgerufen wird, falls Sie versuchen herauszufinden, warum (wie ich).Fügen Sie dies in einem benutzerdefinierten UITableViewCell-Controller hinzu
Fügen Sie dies im UITableView-Controller hinzu
quelle
quelle
quelle
Ich habe viele Lösungen gesehen, aber alles war falsch oder unvollständig. Sie können alle Probleme mit 5 Zeilen in viewDidLoad und Autolayout lösen. Dies für Ziel C:
Für schnelle 2.0:
Erstellen Sie jetzt Ihre Zelle mit xib oder in der Tabellenansicht in Ihrem Storyboard. Damit müssen Sie nichts mehr implementieren oder überschreiben. (Vergessen Sie nicht die Anzahl der Zeilen 0) und das untere Etikett (Einschränkung) stufen "Content Hugging Priority - Vertical to 250" herab.
Sie können den Code in der nächsten URL herunterladen: https://github.com/jposes22/exampleTableCellCustomHeight
quelle
Stellen Sie zum Festlegen der automatischen Bemaßung für die Zeilenhöhe und der geschätzten Zeilenhöhe die folgenden Schritte sicher, damit die automatische Bemaßung für das Layout der Zellen- / Zeilenhöhe wirksam wird.
UITableViewAutomaticDimension
zu rowHeight & geschätzteRowHeightheightForRowAt
geben Sie einen Wert zurückUITableViewAutomaticDimension
)- -
Ziel c:
Schnell:
Für Label-Instanz in UITableviewCell
Hinweis : Wenn Sie mehr als ein Etikett (UIElements) mit dynamischer Länge haben, das entsprechend seiner Inhaltsgröße angepasst werden sollte: Passen Sie die Priorität "Inhaltsumarmung und Kompressionswiderstand" für Etiketten an, die Sie mit höherer Priorität erweitern / komprimieren möchten.
Hier in diesem Beispiel habe ich eine niedrige Priorität für Umarmung und hohe Kompressionsbeständigkeit festgelegt, was dazu führt, dass für den Inhalt des zweiten (gelben) Etiketts mehr Priorität / Wichtigkeit festgelegt wird.
quelle
Dank aller Beiträge zu diesem Thema gibt es einige wirklich hilfreiche Möglichkeiten, die Zeilenhöhe einer UITableViewCell anzupassen.
Hier ist eine Zusammenstellung einiger Konzepte von allen anderen, die beim Erstellen für das iPhone und iPad wirklich hilfreich sind. Sie können auch auf verschiedene Abschnitte zugreifen und diese an die unterschiedlichen Größen der Ansichten anpassen.
quelle
Um die dynamische
-heightForRowAtIndexPath
Zellenhöhe mit zunehmendem Text von Label zu erhalten, müssen Sie zuerst die Höhe berechnen, die der Text in der Delegate-Methode verwenden wird, und sie mit den zusätzlichen Höhen anderer Etiketten und Bilder zurückgeben (maximale Höhe des Texts + Höhe anderer statischer Elemente) Komponenten) und verwenden die gleiche Höhe bei der Zellenerstellung.quelle