TableView单元格动态高度

时间:2017-06-13 04:53:33

标签: ios uitableview swift3 row-height uitableviewautomaticdimension

我有一个UITableView(表1)。在UITableView Cell中,我有另一个UITableView(表2)。

Table 2中,行的高度为UITableViewAutomaticDimension

我的要求是 - 我希望Table 2不应该滚动并按照其中的行数取其全高。所以,根据Table 2的高度,我需要设置{ {1}}的行高。

我正在使用表2的contentSize.height,但它不起作用。我经常搜索但没有找到任何东西。

代码:

Table 1

更新:

我调试了代码,发现表2的单元格的估计高度影响表1单元格的高度。 即 - 如果表2的细胞的估计高度为100并且这些是5个细胞。然后这个func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { let cell = tableView_First.dequeueReusableCell(withIdentifier: "SecondTableViewCell") as! SecondTableViewCell return cell.second_TableView.contentSize.height } 给了我500.哪个错了。因为细胞有不同的高度10,20,30,40,10。

任何建议都将受到赞赏。

谢谢!

2 个答案:

答案 0 :(得分:0)

由于以下两个原因,你可能会得到错误的结果

  1. 当您cell.second_TableView.contentSize.height时,cell.second_TableView可能无法完全加载,因此您的身高会出现错误。

  2. 您正在将新单元格取代而不是获取现有的已加载单元格。

  3. 请尝试以下代码:

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
        {
    
    //Get existing cell rather deque new one
             let cell = tableView_First.cellForRowAtIndexPath(indexPath) as!  SecondTableViewCell
    
    //This will force table view to load completely 
       cell.second_TableView.layoutIfNeeded()
    
            return cell.second_TableView.contentSize.height
        }
    

    希望这能解决您的问题。

答案 1 :(得分:0)

在viewDidLoad中写下这两行,

tableView.estimatedRowHeight = 241

tableView.rowHeight = UITableViewAutomaticDimension

func tableView(_ tableView:UITableView,heightForRowAt indexPath:IndexPath) - > CGFloat {         返回UITableViewAutomaticDimension     }