繁体   English   中英

UITableViewCell内部的UITableView的动态行高

[英]Dynamic row heights of a UITableView inside a UITableViewCell

我有一个“主” UITableView,其中使用了从.xib加载的不同单元格。 其中一些单元格本身也具有UITableView。

现在,我已经将每个单元格的行高设置为原始xib大小。 但是,我想使高度动态变化,并与“子” UITableView中的行数相对应。

我遇到以下问题:

  • 加载ViewController后,主UITableView需要为其具有的每个单元格都具有一个高度。
  • 到需要此高度时,子UITableView尚未加载其自己的单元格,因此还不是适当的大小。

我尝试了以下方法:

  • 首先,以“估计”高度加载单元格
  • 单元加载其自己的tableView并调用以刷新主tableView

但是,在这种情况下,单元格将使用“估计的”高度来布置自己的行。 因此,它总是太大或太小。

我该如何解决这个问题?

第一种方法:

  1. 为子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() } } 
  2. 在“界面”构建器中,将子tableView的类更改为MyOwnTableView(子类UITableView)。

  3. 设置父表和子表视图的自动行高。

      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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM