我在运行时遇到桌子高度问题。
我在我的超级视图中添加了滚动视图。在Scroll View上方,我在顶部添加了一个UIView,然后在UIView之后放置了一个UITableView(scrollEnabled为false),并再次在UITableView的底部添加了UIView。
问题:我希望用户在屏幕上进行一次滚动,因此我禁用了表视图滚动属性。现在我的问题是我正在从服务器获取表数组数据,因此从服务器获取数据后,在编写表高度逻辑的位置未调用我的viewDidLayoutSubviews方法。当我重新加载相同的屏幕时,一切工作正常。
这是我的代码:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if devicesArray.count != 0{
viewDeviceList.frame = CGRect(x: viewDeviceList.frame.origin.x, y: viewDeviceList.frame.origin.y, width: viewDeviceList.frame.size.width, height: tableDeviceList.contentSize.height)
tableDeviceList.reloadData()
}
}
有人可以建议我这样做吗?谢谢。
答案 0 :(得分:1)
请尝试使用以下代码,并让我知道。我正在与观察者一起工作,并且它工作得很好。
//MARK:- Add this observer into your View/Controlloer
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
self.transactionTableViewHeightConstraints.constant = transactionTableView.contentSize.height
}
//MARK:- Fetch TableListData
func updateTableViewHeightAfterAPICall(){
self.transactionTableView.addObserver(self, forKeyPath: "contentSize", options: [], context: nil)
self.transactionTableView.reloadData()
UIView.animate(withDuration: 0.5) {
self.view.layoutIfNeeded()
}
}
答案 1 :(得分:1)
像这样为tableView高度约束创建出口
@IBOutlet weak var tableViewHeightConstraint: NSLayoutConstraint!
添加此行
self.tableView.reloadData()
self.tableViewHeightConstraint.constant = self.tableView.contentSize.height