【发布时间】:2019-02-12 21:16:19
【问题描述】:
我有一个在 ScrollView 中不断变化(插入和删除单元格)的 TableView。我禁用了 TableView 的滚动,因为 TableView 上方有一个 MapView,我想滚动整个 View,而不仅仅是当用户向上滚动时的 TableView。由于单元格不断被插入和删除到 TableView 中,因此 TableView 的高度在应用程序运行的整个过程中不会固定。
我正在尝试不断设置 TableView 的高度以匹配内部内容总和的高度,
func someFunc() {
// call viewDidAppear to update TableView
viewDidAppear(true)
// Calculate the size of the ScrollView
var y: CGFloat = 10
y = mapView.bounds.size.height + tableView.bounds.size.height + 10
var sz = scrollView.bounds.size
sz.height = y
scrollView.contentSize = sz
}
// Update the TableView on main thread
override viewDidAppear(animated: Bool) {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.tableView.reloadData()
var frame: CGRect = self.tableView.frame
frame.size.height = self.tableView.contentSize.height
self.tableView.bounds.size.height = frame.size.height
})
}
但是,tableView.bounds.size.height 没有更新到新的内容高度。实际上它有时会更新,可能每隔几次调用一次。我几乎可以肯定这是因为 dispatch_asyn() 是一种异步方法。所以,我可能需要返回方法来解决这个问题,但我不确定如何。
我这样做是否正确以完成我的需要?有一个更好的方法吗?非常感谢任何帮助。
【问题讨论】:
标签: swift uitableview uiscrollview tableview dispatch-async