2016-08-08 13 views
0

Ich habe eine angepasste a UITableviewCell. Es gibt ein Titel-Label und ein Detail-Label.Angepasste UITableViewCell Update Subviews

Jetzt möchte ich die Detail-Label-Attribute nach dem Inhalt anpassen. Wenn die Zeichenfolge Größe größer als der Rahmen ist gesetzt, dann die Anzahl der Linie 2.

Ich habe versucht, den Code in der cellForRowAtIndexPath oder layoutSubViews in der Zelle Klasse zu setzen.

Das Stück Code ist wie

TransportationViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
UIFont* font = cell.detailLabel.font; 
NSDictionary* attribute = @{NSFontAttributeName:font}; 
const CGSize textSize = [cell.detailLabel.text sizeWithAttributes: attribute]; 

if (textSize.width > cell.detailTextLabel.frame.size.width && cell.detailLabel.numberOfLines == 1) { 

    NSLog(@"%lf, %lf, %lu", cell.detailLabel.frame.size.width, textSize.width, (long)cell.detailLabel.numberOfLines); 
    cell.detailTextLabel.font = [UIFont systemFontOfSize:8]; 
    cell.detailTextLabel.numberOfLines = 2; 

    [cell setNeedsLayout]; 
} 

Es tatsächlich die, wenn die Bedingung vergangen, aber die Einstellung des Labels funktioniert nicht.

+1

wahrscheinlich verwirren Sie zwischen detailLabel und detailTextLabel? Die zweite Sache ist, dass Sie hier nicht anrufen müssen [[setNeedsLayout]] es sollte ohne dies funktionieren. – Nikita

Antwort

1

schreiben Code unten in Sicht didload

self.theTableView.estimatedRowHeight = 100; 
self.theTableView.rowHeight = UITableViewAutomaticDimension; 

[self.theTableView setNeedsLayout]; 
[self.theTableView layoutIfNeeded]; 

In cellForRowAtIndexPath cell.detailTextLabel.numberOfLines = 0;

0

gesetzt numberOfLines = 0;

dies wird Ihr Problem lösen.

Edit 1: Code für die Berechnung der dynamischen Höhe.

CGSize boundingBox = [label.text boundingRectWithSize:constraint 
               options:NSStringDrawingUsesLineFragmentOrigin 
              attributes:@{NSFontAttributeName:label.font} 
               context:context].size; 

Mit dieser Höhe können Sie die weiteren Berechnungen durchführen.

Für weitere Informationen können Sie überprüfen, diese Antwort https://stackoverflow.com/a/27374760/5660422

+0

Aber ich muss immer noch die Schriftgröße irgendwo dynamisch setzen – Mix

+0

ok sicher, bearbeite @Mix –