我UITableView
内有UIScrollView
。从服务器获取一些数据后,我重新加载了tableview,之后我获得了tableview内容高度,并将tableView的高度更改为该内容高度,并在layoutIfNeed()
上调用scrollView
。
但问题是,重新加载tableView
后访问时contentHeight不正确,但如果访问一秒后它正在给出正确的高度。有没有办法在不等几秒钟的情况下获得正确的高度。
self.tableView.reloadData()
self.tableViewHeight.constant = self.tableView.contentSize.height
self.containerSV.layoutIfNeeded()
答案 0 :(得分:4)
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
}
}
来观察内容大小的变化。
foreach (GridDataItem item in mygrd.SelectedItems) {
if(item["column1"] != ”somethingSpecific”)
//Do Something with item
}
答案 1 :(得分:0)
您可以在不使用KVO的情况下通过以下方法获得正确的contentSize:
self.tableView.reloadData()
DispatchQueue.main.async {
self.tableViewHeight.constant = self.tableView.contentSize
self.containerSV.layoutIfNeeded()
}
由于主队列是并发的,因此只有在重新加载tableview完成后,才会执行将contentSize赋给它的任务。