2016-09-24 5 views
0

In meinem Storyboard habe ich eine UITableView mit dynamisch generierten UITableViewCell s. Jede Zelle enthält zwei Etiketten und 1 Textansicht:Wie kann ich die UITableViewCell-Höhe an den Inhalt von UITextView anpassen, der darin enthalten ist?

enter image description here

Ich habe einen Code, der die Größe des Textfeldes auf die Menge an Text anzupassen:

let fixedWidth = cell.myComment.frame.size.width 
cell.myComment.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) 
let newSize = cell.myComment.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) 
var newFrame = cell.myComment.frame 
newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height) 
cell.myComment.frame = newFrame; 

und es funktioniert gut, wenn ich eine Hintergrundfarbe meiner Textview zu rot ich sehe:

enter image description here

und die Zelle selbst - ich bin Einstellung der si ze hier:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
{ 
    if indexPath.row == 0 { 
     return 100//this is my static cell 
    } 
    else { 
     return 117; //for now it's hardcoded - how can I set this value dynamically based on content? 
    } 
} 

So wie ich im Kommentar oben geschrieben habe - wie kann ich die Höhe der Zelle dynamisch basierend auf der Menge an Text in der Textansicht eingestellt?

Antwort

3

Der Schlüssel Selbst Sizing Tabellenzellen zu erhalten (automatische Layout-basierte, die ich empfehlen kann) ist wie folgt:

  • zu Ihrem Subviews hinzufügen die contentView der Bereitstellung UITableViewCell
  • Einschränkungen zwischen Ihrem Subviews und die contentView so, dass Ihre Unteransichten alle Kanten der Tabellenzelle erreichen. In Ihrem Fall bedeutet dies wahrscheinlich, dass Sie die leading, trailing, top und bottom Kanten Ihrer UITextView an die entsprechenden Kanten der contentView ausrichten.
  • Stellen Sie die Zeilenhöhe auf UITableViewAutomaticDimension anstelle eines fest codierten CGFloat.
  • Geben Sie irgendwo in Ihrem Controller eine Schätzung der Höhe mit tableView.estimatedRowHeight = x (eine hartcodierte Konstante ist in Ordnung, dies ist für die Leistung).
+0

Hm, brauche ich also noch einen Teil des Codes, um die Höhe der Textansicht anzupassen? – user3766930

+0

Nein. Solange Sie die Kanten beschränken, ist UITextView intelligent genug, um den Text in die zweite Zeile einzubinden. Es hat, wie 'UILabel', eine inhaltliche Größe, die auf seinem Text basiert. – Connor

+0

danke Mann, funktioniert wie ein Charme :) – user3766930

Verwandte Themen