首先,这不是关于如何自动调整tableview中单元格大小的问题,而是如何自动调整整个tableview的大小。
所以我有一个scrollview,它有一个tableview和另外两个视图作为它的子视图。 tableview的单元格已经自动调整大小,同样这个问题与单个单元格无关。但是,tableview根本没有调整大小。
我做了什么: 1)将tableview设置为具有top,bottom,leading和trailing约束 2)将单元格设置为启用自动布局 3)*我不知道构建时的单元格大小 4)我在tableview上禁用了滚动模式
这么长的故事简短,我怎样才能让tableview自行调整大小?
修改
单元格包含可以有各种文本行的标签,因此使用自动布局的单元格应该确定表格视图的高度。
以下图片显示了视图的设置方式:
正如您所看到的,tableview只是视图的一小部分,并且由于tableview的scrollview被取消激活,因此应该存在任何滚动问题。
编辑2
这实际上它应该如何结束,但是,我自己计算这个,每次我想对单元格做一个小的改变,整个代码,计算单元格的高度,需要重写,它是我很难让高度恰到好处。
编辑3
到目前为止,我在tableview上有一个高度限制,我手动计算,但是删除此约束并尝试让自动布局处理tableview高度大小会产生以下错误:
滚动查看 需要约束:Y位置或高度
因此我可以得出结论,tableview不知道如何根据自动布局的单元格自动计算高度。
答案 0 :(得分:2)
您无需创建高度限制或设置框架。创建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)
}
}
答案 1 :(得分:-1)
您可以使用UITableView's
tableview.frame = CGRect(x: <some_x>, y: <some_y>, width: <some_width>, height: <some_height>)
框架
如果您的UITableViewCells
使用自动布局,则应在UITableView's
框架更改时调整大小。