获取正确的TableView的ContentSize.height

noo*_*oob 3 uiscrollview tableview autolayout nslayoutconstraint swift

我在UITableView里面UIScrollView。我拿来从服务器的一些数据后,我重新加载tableview中和之后,我得到的tableview内容高度的tableView的高度更改为内容高度和调用layoutIfNeed()scrollView

但是问题在于,tableView重装之后的访问时contentHeight不正确,但是如果一秒后访问,它将给出正确的高度。有没有什么方法可以得到正确的高度而无需等待几秒钟。

self.tableView.reloadData()
self.tableViewHeight.constant = self.tableView.contentSize.height
self.containerSV.layoutIfNeeded()
Run Code Online (Sandbox Code Playgroud)

Bil*_*lal 5

reload正确后,contentSize只有在所有单元都加载后才可用。您可以Key Value Observing用来观察内容大小的变化。

// register observer 
tableView.addObserver(self, forKeyPath: "contentSize", options: [.new, .old, .prior], context: nil)

@objc override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {        
    if keyPath == "contentSize" {
         // content size changed
    }
}
Run Code Online (Sandbox Code Playgroud)