[英]Dynamic row heights of a UITableView inside a UITableViewCell
我有一个“主” UITableView,其中使用了从.xib加载的不同单元格。 其中一些单元格本身也具有UITableView。
现在,我已经将每个单元格的行高设置为原始xib大小。 但是,我想使高度动态变化,并与“子” UITableView中的行数相对应。
我遇到以下问题:
我尝试了以下方法:
但是,在这种情况下,单元格将使用“估计的”高度来布置自己的行。 因此,它总是太大或太小。
我该如何解决这个问题?
第一种方法:
为子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
您可以创建一个对象,该对象将创建要放入单元格的类的模板对象,在其中放入数据,计算其大小,然后将其返回到master tableView的sizeForItem方法上。 这样,当主tableView准备数据时,您将能够为项目设置返回的计算大小。
这就是我在项目中做到的方式。
您可以使用缓存来改进此对象,使其通用并在需要时使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.