2016-06-26 10 views
3

Ich versuche, die Höhe aller Tabelleninhalte zu ermitteln, damit ich den Container aktualisieren kann. Dadurch können der Container und andere Ansichten in der Bildlaufansicht zusammen blättern.Höhe der Tabelleninhalte in Swift abrufen

+0

Mögliches Duplikat von [Höhe von UITableView auf die Höhe seines Inhalts mit Auto-Layout setzen] (http://stackoverflow.com/questions/33268463/set-getuiketview-height-to-the-height-of-its-content -with-auto-layout) – nova

+0

siehe [dies] (http://Stackoverflow.com/a/43520073/1598912) Ich beantwortete die gleiche Frage.Gutes Glück – nova

Antwort

8

Swift:

var tableViewHeight: CGFloat { 
    tableView.layoutIfNeeded() 

    return tableView.contentSize.height 
} 

Objective-C

- (CGFloat)tableViewHeight { 
    [tableView layoutIfNeeded]; 

    return [tableView contentSize].height; 
} 
+0

Ich denke Einstellung Höhe auf Tabellenansicht Inhalt Höhe ist nicht gut so Es hängt davon ab, wann Sie die Tabelleninhaltshöhe erhalten ... Wenn Sie diese Methode direkt nach dem erneuten Laden der Tabelle aufrufen, kann es vorkommen, dass Sie eine falsche Inhaltsgröße erhalten – vivek

2

Swift 3

override func viewDidLoad() { 
    super.viewDidLoad() 

    myTbleView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil) 
} 

override func viewWillDisappear(_ animated: Bool) { 
    myTbleView.removeObserver(self, forKeyPath: "contentSize") 
    super.viewWillDisappear(true) 
} 

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    if(keyPath == "contentSize"){ 
     if let newvalue = change?[.newKey] 
     { 
      let newsize = newvalue as! CGSize 
      tableViewHeightConstraint.constant = newsize.height 
     } 
    } 
} 

Hope this Ihnen helfen.

Verwandte Themen