如何根据swift中UITableView的高度增加父视图的高度?

Tec*_*ain 7 uitableview ios swift

我有我的屏幕层次结构.

-ScrollView 
 -ContentView
   -View1
   -View2
   -View3
   -Collectioview
     -CollectioviewCell 
       -Tableview 
         -Tableviewcell 
            -Content
Run Code Online (Sandbox Code Playgroud)

现在这里我的tableview内容是动态的,因此tableview单元格的高度不能是静态的.所以tableview的高度将根据每个单元格的单元格数和高度而增加.

基于Tableview高度,集合视图的高度应该增加,这导致滚动视图内容视图的高度增加.

但我无法理解如何用更少的代码实现这一目标?或者可以以编程方式完成?

在此输入图像描述

iOS*_*MIB 1

假设表视图中的每一行都有固定的高度。

因此表视图的高度将是表视图中的行数*行高。假设每行的高度为 30,并且表视图中有4 行

tableHeight = 4*30 = 120
Run Code Online (Sandbox Code Playgroud)

您不必等待 tableview 重新加载数据。您可以使用在表视图中填充数据的数组的计数来获取行数。所以你的行数就是你的数组的计数。到这里你就得到了桌面视图的高度。现在要增加父级高度,为 tableview 和 collectionview 提供固定高度,并采用两者的高度约束的出口。

只需在重新加载之前计算 tableview 的高度并将该高度赋予 tableView 的高度约束即可。还要为 collectionView 的高度约束提供相同的高度加上额外空间的高度(如果有)。

例如: tableViewHieghtConstraint.constant = tableHeight collectionViewHieghtConstraint.constant = tableHeight

这将增加您的 collectionview 和 tableView 的高度,从而导致内容视图的高度增加。

如果你想用每个单元格的动态高度来计算tableview的高度,可以使用以下方法来获取高度。尽管不推荐这样做,也不是在所有情况下都有效,所以请在您同意的情况下使用它。

func reloadData() {
        self.tableView.reloadData()
        let tableHeight: CGFloat = 0
        DispatchQueue.main.asyncAfter(deadline: .now()+0.3) {
            for i in 0...aryData.count - 1 {
                let frame = self.tableView.rectForRow(at: IndexPath(row: i, section: 0))
                tableHeight += frame.size.height
                print(frame.size.height)
            }
        }
        tableViewHieghtConstraint.constant = tableHeight 
        collectionViewHieghtConstraint.constant = tableHeight
    }  
Run Code Online (Sandbox Code Playgroud)

您可以避免使用延迟或提供较少的延迟。此处给出延迟,以防如果有大量数据需要处理并显示在表视图上,则可能需要几分之一秒的时间。

PS:不要忘记将collectionview的底部约束赋予contentview。