【发布时间】:2021-12-23 22:38:05
【问题描述】:
使用下面的代码,我可以获得 tableview 动态高度,但是当我隐藏 tableview 时,动态高度仍然保留在视图中,为什么?
我在故事板中使用 tableview 高度 0
代码:最初我隐藏了tableview,这里workExpBtn 就像展开/折叠按钮。所以第一次如果我点击 workExpBtn 然后 tableview 显示但是如果我第二次点击按钮然后 tableview 隐藏但它的高度仍然在视图中为什么?
如果我隐藏了 tableview,那么我需要再次将 tableview 高度设为0,但是如何?
class WorkVC: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var workExpTablHeight: NSLayoutConstraint!
@IBOutlet weak var workExpTableview: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
workExpTablHeight.constant = 0
workExpTableview.isHidden = true
}
@IBAction func workExpBtn(_ sender: Any) {
workExpTableview.isHidden = workExpTableview.isHidden ? false : true
workExpTableview.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil)
workExpTableview.reloadData()
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
let tableview = object as? UITableView
if tableview == self.workExpTableview{
if(keyPath == "contentSize"){
if let newvalue = change?[.newKey]
{
let newsize = newvalue as! CGSize
workExpTablHeight.constant = newsize.height
}
}
}
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "WorkExpCell", for: indexPath) as! WorkExpCell
cell.selectionStyle = .none
return cell
}
最初tableview隐藏o/p:
当我点击按钮时,tableview 显示带有绿色单元格的 o/p:
当我再次点击按钮时,tableview 被隐藏但高度保持为 o/p:
【问题讨论】:
-
将表格视图和标签视图都放在隐藏tableView的垂直堆栈中,它将起作用
-
@NomanUmar,谢谢,成功了
标签: swift tableview height show-hide