使用自动布局将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() } }