2016-04-17 21 views
0

Im mit einem Problem beim Einrichten UITextview in UITableViewCell. Da die Funktion heightforrowatindexpath vor cellforrowatindexpath ausgeführt wird, kann ich die Größe des Inhalts UITextview nicht berechnen.UITextview Höhe in UITableview Swift

Im Berechnen der Größe einfach textview.contentSize.height in cellforrowatindexpath Funktion.

Im wollen im Grunde UITextview content fit in UITableViewCell so keine Scroll für jeden UITextView sichtbar ist, und es wird durch eine Erhöhung der Höhe von UITableViewCell Gesamtinhalt zeigen.

ich auch UILabel knapp über die UITextView in UITableViewCell und ich versuchte, aber nicht in der Lage contraints für beide zu setzen, mein Ziel zu erreichen.

Wie kann ich berechnen die Größe UITableViewCell dynamisch in folgenden Funktion:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

} 

PS: Ist es möglich, die UITableViewCell Höhe ein wenig nach Gerätehöhe zu verwenden, zu erhöhen, Auto-Layout verwenden oder eine Technik sonst .

Antwort

3

Sie können nur Ihre Textview mit dem Inhalt, um die Höhe des Textview

func calculateHeight(textView:UITextView, data:String) -> CGRect { 

    var newFrame:CGRect! 

    // I was using the HTML content here. If your content is not HTML you can just pass the stringValue to your textView 
    do { 
     let attr = try NSAttributedString(data: html.dataUsingEncoding(NSUTF16StringEncoding)!, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType], documentAttributes: nil) 
     textView.attributedText = attr 

    }catch { 
     //Handle Exceptions 
    } 

    let fixedWidth = textView.frame.size.width 
    textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) 
    let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) 
    newFrame = textView.frame 
    newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height) 
    print("height \(newFrame.height)") 
    return newFrame 
} 

Sie passieren in Ihrem heightForRowAtIndex, dass diese Methode zu berechnen rufen so im Gegenzug können Sie einen neuen aktualisierten Rahmen erhalten, aus dem Sie können die neue aktualisierte Höhe abrufen.

Stellen Sie sicher, cellForRowAtIndexPath in scrollEnabled als false Ihre Zelle Textview zu halten

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     //Cell making here...... 

     cell.yourTextView.scrollEnabled = false 
     return cell 
    } 
} 
1

1) In heightForRowAtIndexPath der Zellengröße des folgenden geben:

Rückkehr UITableViewAutomaticDimension

2) ... und füge folgendes hinzu:

override func tableView (tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return UITableViewAutomaticDimension }

Ich hoffe, es hilft ...

Verwandte Themen