首先这不是一个关于如何自动调整tableview内部单元格大小的问题,更多的是如何自动调整整个tableview的大小。
所以我有一个滚动视图,它有一个tableview和另外2个视图作为它的子视图。tableview的单元格已经自动调整了大小,这个问题又不是针对单个单元格的。但是,tableview根本没有调整大小。
我做了什么:1)设置tableview有上、下、前、后约束2)设置单元格启用自动布局3)*我在构建时不知道单元格的大小4)我已经禁用了tableview的滚动模式。
那么长话短说,如何才能顺着让tableview自己调整大小呢?
编辑
单元格中包含一个标签,这个标签可以有不同的文字行,因此,使用自动布局的单元格,就应该确定表格视图的高度。
下面的图片显示了视图的设置方式。
正如你所看到的,表格视图只是视图的一小部分,而且由于表格视图的滚动视图被停用,所以应该也不会出现任何滚动问题。
EDIT 2
其实应该是这样结束的,然而,我是自己计算的,每当我想对单元格做一个小小的改动时,整个计算单元格高度的代码都需要重写,要想让高度恰到好处,对我来说相当困难。
编辑3
到目前为止,我在tableview上有一个高度约束,我是手动计算的,然而删除这个约束,并试图让自动布局处理tableview高度大小,会产生以下错误。
Scroll View Need constraint for: Y位置或高度
因此我可以得出结论,tableview不知道如何根据其单元格自动计算高度与自动布局。
你不需要创建一个高度约束或设置框架什么的。创建一个UITableView的子类,并重新计算它的高度。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)
}
}
你可以改变你的 UITableView's
框 tableview.frame = CGRect(x: <some_x>, y: <some_y>, width: <some_width>, height: <some_height>)
如果您的 UITableViewCells
使用自动布局,那么它们就应该调整大小,当 UITableView's
帧变化。