使用自动布局将UITableView的高度设置为其内容的高度
我有一个视图里面有两个标签和一个表视图。 我希望标签1始终保持在我的表格视图之上,标签2位于表格视图之下。 问题是,表视图需要自动resize,意思是增加高度或减less。
现在我有一个约束说,表视图的高度总是等于85和一个@IBOutlet
的高度约束,我可以改变常数。
我猜我需要改变所有的单元格的高度,但我不知道如何。
你必须重写你的UIViewController中的updateViewConstraints()
,并将height约束的常量设置为tableView.contentSize.height:
override func updateViewConstraints() { super.updateViewConstraints() tableHeightConstraint.constant = tableView.contentSize.height }
然后你必须确保Label2
的顶部约束greaterThanOrEqual
表视图的底部。 而且您还必须将表视图的高度约束的优先级从“ Required
更改为“ High
以避免在表视图的contentHeight
大于可用高度时出现冲突约束。
还有另一个解决scheme。 你可以在tableview'contentSize'variables上添加观察者。 和自己的大小,当表视图内容的变化。
@IBOutlet weak var tableView: UITableView! @IBOutlet weak var tableHeightConstraint: NSLayoutConstraint! override func viewDidLoad() { super.viewDidLoad() self.tableView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.new, context: nil) } override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { tableView.layer.removeAllAnimations() tableHeightConstraint.constant = tableView.contentSize.height UIView.animate(withDuration: 0.5) { self.updateConstraints() self.layoutIfNeeded() } }