我有一个'master'UITableView,我在其中使用从.xib加载的不同单元格。其中一些细胞本身也有一个UITableView。
现在我已将每个单元格的行高设置为原始xib大小。但是,我希望高度动态并且对应于'child'UITableView中的行数。
我遇到了以下问题:
我尝试了以下内容:
但是,在这种情况下,单元格将使用“估计”高度来布置自己的行。因此它总是太大或太小。
如何解决这个问题?
答案 0 :(得分:5)
第一种方法:
为子tableView创建一个子类,并覆盖internalContentSize。
class MyOwnTableView: UITableView {
override var intrinsicContentSize: CGSize {
self.layoutIfNeeded()
return self.contentSize
}
override var contentSize: CGSize {
didSet{
self.invalidateIntrinsicContentSize()
}
}
override func reloadData() {
super.reloadData()
self.invalidateIntrinsicContentSize()
}
}
在“界面”构建器中,将子tableView的类更改为MyOwnTableView(UITableView的子类)。
设置父表视图和子表视图的自动行高。
tableView.estimatedRowHeight = 60.0;
tableView.rowHeight = UITableViewAutomaticDimension;
第二种方法: 1.为子tableView创建一个具有任何值的高度约束,并连接设置子tableView高度的IBOutlet。 2.将高度约束的常量设置为tableView.contentSize.height
self.tableViewHeight.constant = self.tableView.contentSize.height
答案 1 :(得分:1)
您可以创建对象,该对象将创建要放入单元格的类的模板对象,将数据放入其中,计算其大小并将其返回到master tableView的sizeForItem方法。这样,当master tableView准备数据时,您将能够为项目设置返回的计算大小 这就是我在项目中这样做的方式 您可以使用缓存改进此对象,使其成为通用的,并在您可能需要的任何地方使用。