UITableViewCell内的UITableView具有动态单元格高度

Ale*_*akh 8 uitableview xamarin.ios ios autolayout xamarin

我有一个动态的项目列表,每个项目可以有不同的teamplate /布局(和高度).其中一个项目类型可以有一个内部的项目列表供选择,定期5-6行,每行有不同的高度.

如果我尝试进一步描述它,在我的场景中,我在另一个tableview(#master)的tableviewcells(#master-cell)中有一个tableview(#slave).此外,我的#slave tableview中的单元格(#slave-cell)也可能具有不同的高度.所以我需要布局我的#slave让#master自动计算并更新它的大小.

在此输入图像描述

我有内表(#slave)的问题.在自动布局的情况下,为了适应所有单元格空间,表格将与UILabel或其他控件不同地折叠.所以我需要的是获得#slave表的预计大小并设置#slave的#slave =内容高度的高度.

我找到了类似的帖子,如果所有行都有相同的高度,但我使用动态高度的自定义行,那么tableView.contentSize.Height给我无效的结果(基本上只是乘以rowNumbers*estimatedRowHeight,你可以在屏幕截图上看到它) ,主要项目#3有4个内部单元格).即使在调用#slave.reloadData之后我也无法达到那么大.

构建这种UI的正确方法是什么?

附带测试项目的源代码(Xamarin.iOS)

wj2*_*061 4

几天前我刚刚遇到了同样的问题,并试图解决它。

#master-cell 的工作方式类似于 childViewController,它是delegate datasource#slave TableViewController 的。但是 UITableViewcell 中不能有 childViewController。

自定义UITableViewCell以保存必要的属性并充当#slave TableViewController的 delegate datasource,并配置#slave-cell的高度和数据。

真正的问题是#master-cell 的高度,

  1. 如果您的数据简单且静态,您可以提前计算高度,并在func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat ViewController 的方法中返回它。
  2. 否则,向 #master-cell 添加一个方法,该方法在设置其属性时返回整个单元格的高度。并创建一个代理 #master-cell 来计算高度并返回它:

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
      let cell   = CustomUITableViewCell();
      let model  = self.getModel(indexPath)
      cell.model = model
      let height = cell.requiredHeight()
      return height;
    }    
    
    Run Code Online (Sandbox Code Playgroud)

    它既复杂又昂贵,但很有效。