[英]Self sizing tableview
首先这不是关于如何自动调整tableview内单元格大小的问题,而是如何自动调整整个tableview的大小。
所以我有一个滚动视图,它有一个 tableview 和 2 个其他视图作为它的子视图。 tableview 的单元格已经自动调整大小,同样这个问题与单个单元格无关。 但是,tableview 根本不会调整大小。
我所做的:1) 将 tableview 设置为具有顶部、底部、前导和尾部约束 2) 将单元格设置为启用自动布局 3) * 我不知道构建时的单元格大小 4) 我有在 tableview 上禁用滚动模式
长话短说,我怎样才能让 tableview 调整自己的大小?
编辑
单元格包含一个标签,可以有不同的文本行,因此使用自动布局的单元格应该确定表格视图的高度。
下图显示了如何设置视图:
如您所见,tableview 只是视图的一小部分,并且由于 tableview 中的滚动视图已停用,因此应该也不会出现任何滚动问题。
编辑 2
这实际上是它应该如何结束,但是,我自己计算这个,每次我想对单元格进行小的更改时,计算单元格高度的整个代码都需要重写,这对于我要得到恰到好处的高度。
编辑 3
到目前为止,我对手动计算的 tableview 有一个高度约束,但是删除此约束并尝试让自动布局处理 tableview 高度大小会产生以下错误:
滚动视图需要约束:Y 位置或高度
因此,我可以得出结论,tableview 不知道如何根据具有自动布局的单元格自动计算高度。
您不需要创建高度约束或设置任何框架。 创建 UITableView 的子类,并在每次其contentSize
更改(即添加或删除新数据)时重新计算其intrinsicContentSize
contentSize
。 这是您需要的一切:
class SelfSizingTableView: UITableView {
override var contentSize: CGSize {
didSet {
invalidateIntrinsicContentSize()
setNeedsLayout()
}
}
override var intrinsicContentSize: CGSize {
let height = min(.infinity, contentSize.height)
return CGSize(width: contentSize.width, height: height)
}
}
您可以使用tableview.frame = CGRect(x: <some_x>, y: <some_y>, width: <some_width>, height: <some_height>)
更改UITableView's
框架
如果您的UITableViewCells
使用自动布局,那么它们应该在UITableView's
框架更改时调整大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.