这就是我添加UITableView的方式:
tableView = UITableView()
tableView.dataSource = self
tableView.delegate = self
tableView.register(UINib(nibName: "TableViewCell", bundle: nil), forCellReuseIdentifier: "Cell")
tableView.rowHeight = 60.0
tableView.tableFooterView = UIView()
view.addSubview(tableView)
tableView.translatesAutoresizingMaskIntoConstraints = false
tableViewHeightAnchor = tableView.heightAnchor.constraint(equalToConstant: 0)
let constraints = [tableView.topAnchor.constraint(equalTo: view.topAnchor), tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor), tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor), tableViewHeightAnchor!]
NSLayoutConstraint.activate(constraints)
尤其是这一部分很重要:
tableView.topAnchor.constraint(equalTo: view.topAnchor)
在尝试将其连接到UISearchController的searchBar底部之前,但在这种情况下,它崩溃了。
和我的
func updateSearchResults(for searchController: UISearchController) {
filterContentForSearchText(searchController.searchBar.text!)
tableView.reloadData()
UIView.animate(withDuration: 0.6) {
self.tableViewHeightAnchor.constant = self.tableView.contentSize.height
}
}
我正在调整高度锚,并将其设置为等于tableView的contentSize。 但我有一个问题:
当只有1-2行要显示时,我根本看不到tableView!我只能在contentSize上添加+200.0时才能看到它,但是此解决方案非常糟糕且难以控制,因为在这种情况下无法正确显示。
我该如何解决?这是我第一次尝试用代码进行所有设计,这有时真的很令人困惑。也许有人可以向我解释那里出了什么问题
答案 0 :(得分:0)
仅继承UITableView
的子类并覆盖intrinsicContentSize
属性。
class IntrinsicTableView: UITableView {
override var contentSize:CGSize {
didSet {
self.invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize {
self.layoutIfNeeded()
return CGSize(width: UIViewNoIntrinsicMetric, height: contentSize.height)
}
}
答案 1 :(得分:0)
您可以尝试使用这些约束,这些约束将自动为您调整大小,直到高度达到与屏幕相同的高度为止,然后表格视图将允许滚动。
NSLayoutConstraint(item: tableView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1, constant: 0).isActive = true
NSLayoutConstraint(item: tableView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1, constant: 0).isActive = true
NSLayoutConstraint(item: tableView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1, constant: 0).isActive = true
NSLayoutConstraint(item: tableView, attribute: .bottom, relatedBy: .greaterThanOrEqual, toItem: self, attribute: .bottom, multiplier: 1, constant: 0).isActive = true
答案 2 :(得分:0)
在设置高度约束常量后,使用 layoutIfNeeded()。
如果只是想让tableview看起来像调整大小,则将分隔符设置为none 并在单元格内添加一行,以便tableView视图看起来像是调整大小,但仍与屏幕大小相同。