我有一个“主”UITableView,其中我使用从 .xib 加载的不同单元格。其中一些单元格本身也有一个 UITableView。
现在我已将每个单元格的行高设置为原始 xib 大小。但是,我希望高度动态并与“子”UITableView 中的行数相对应。
我遇到以下问题:
- ViewController 加载后,主 UITableView 需要为其拥有的每个单元格设置高度。
- 当需要这个高度时,子 UITableView 还没有加载自己的单元格,因此还不是正确的大小。
我已经尝试过以下方法:
- 首先,加载单元格的“估计”高度
- cell加载自己的tableView并调用刷新主tableView
但是,在这种情况下,单元格将使用“估计”高度来布局其自己的行。因此它总是太大或太小。
我该如何解决这个问题?
第一种方法:
-
为子tableView创建一个子类并覆盖intrinsicContentSize。
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()
}
}
在 Interface builder 中,将子 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)