UITableViewCell

时间:2018-02-07 15:43:12

标签: ios uitableview

我有一个'master'UITableView,我在其中使用从.xib加载的不同单元格。其中一些细胞本身也有一个UITableView。

现在我已将每个单元格的行高设置为原始xib大小。但是,我希望高度动态并且对应于'child'UITableView中的行数。

我遇到了以下问题:

  • 在加载ViewController时,主UITableView需要为其拥有的每个单元格设置一个高度。
  • 当需要这个高度时,子UITableView还没有加载自己的单元格,因此它的大小也不合适。

我尝试了以下内容:

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

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

如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

第一种方法:

  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

答案 1 :(得分:1)

您可以创建对象,该对象将创建要放入单元格的类的模板对象,将数据放入其中,计算其大小并将其返回到master tableView的sizeForItem方法。这样,当master tableView准备数据时,您将能够为项目设置返回的计算大小 这就是我在项目中这样做的方式 您可以使用缓存改进此对象,使其成为通用的,并在您可能需要的任何地方使用。