如何根据UITableView的内容高度设置高度?

Jim*_*Lee 2 uitableview ios swift

我有一个关于 的问题UITableView
我想让 tableView 高度根据我的单元格内容高度。
所以,我成功地使用了以下代码。

DispatchQueue.main.async {
    var frame = self.tableView.frame
    frame.size.height = self.tableView.contentSize.height
    self.tableView.frame = frame
}
Run Code Online (Sandbox Code Playgroud)

但是当我有很多数据要显示时,我的内容就会超出屏幕。
并且tableView也超出了屏幕。
有任何想法来设置它的约束并且不要让它超出屏幕。
我想在tableView底部布局和superView底部布局之间设置15。
我使用 SnapKit 来设置自动布局。

//I want to set this one is the biggest frame size. Other contents I can scroll the tableView to show the data.

tableView.snp.makeConstraints { (make) in 
    make.top.equalTo(self.topLayoutGuide.snp.bottom)
    make.left.equalTo(10)
    make.right.equalTo(-10)
    make.bottom.equalTo(-15)
} 
Run Code Online (Sandbox Code Playgroud)

Mar*_*uch 5

您可以创建一个自定义UITableView

class AutomaticHeightTableView: UITableView {

  override var contentSize: CGSize {
    didSet {
      self.invalidateIntrinsicContentSize()
    }
  }

  override var intrinsicContentSize: CGSize {
    self.layoutIfNeeded()
    return CGSize(width: UIViewNoIntrinsicMetric, height: contentSize.height + 20)
  }

}
Run Code Online (Sandbox Code Playgroud)

然后将您的UITableView班级设置为AutomaticHeightTableView.

这个解决方案的灵感来自于 stackoverflow 上找到的答案。