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高度,集合视图的高度应该增加,这导致滚动视图内容视图的高度增加.
但我无法理解如何用更少的代码实现这一目标?或者可以以编程方式完成?
假设表视图中的每一行都有固定的高度。
因此表视图的高度将是表视图中的行数*行高。假设每行的高度为 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。
| 归档时间: |
|
| 查看次数: |
1783 次 |
| 最近记录: |