我遇到一个困扰我一段时间的问题。如何为另一个表格视图单元格内的表格视图设置自动高度?
所以我有 MainTableView ,其中有 3个单元格 (此表视图具有自动高度),并且位于第3个单元格上我里面还有另一个tableView (我们称它为SecondaryTableView,它具有对其超级视图的约束)
前两个单元格是它正在工作的自动高度。
对于SecondaryTableView的设置,我尝试执行相同的操作,但对于选择xib文件的单元格。
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
tableView.dataSource = self
tableView.delegate = self
tableView.estimatedRowHeight = 900
tableView.rowHeight = UITableView.automaticDimension
registerCells()
}
private func registerCells() {
tableView.register(UINib(nibName: "MainCategorySectionTableViewCell", bundle: nil), forCellReuseIdentifier: "MainCategorySectionTableViewCell")
tableView.register(UINib(nibName: "AdPerHomePageTableViewCell", bundle: nil), forCellReuseIdentifier: "AdPerHomePageTableViewCell")
}
我再附上一张图片,说明它在模拟器中的外观。绿色是第一个单元格,橙色是第二个单元格(已注册的单元格)。我对前两个单元格进行了一些滚动以查看差异。
可能是单元格上没有数据吗?但是我已经贴了一些标签,看起来还是一样
答案 0 :(得分:2)
您需要使用UITableView的intrinsicContentSize
变量。
为子tableView创建一个子类并重写 nativeContentSize。
Dynamic row heights of a UITableView inside a UITableViewCell
答案 1 :(得分:1)
您可能需要在每个包含tableView的单元格处关闭一个闭包,一旦tableView完成重新加载数据,就会立即调用该闭包。 从您的父tableView中,只需捕获这些闭包,然后重新加载整个tableView(或相应部分)即可。
在主ViewController中
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? YourTableViewCell else {
return UITableViewCell()
}
cell.onCompleteReloading = { [weak self] in
guard let self = self else { return }
tableView.reloadSections([indexPath.section], animationStyle: .none)
}
cell.setup()
return cell
}
在您的单元格中,定义一个闭包
var onCompleteReloading: (() -> Void)?
func setup() {
// Do some stuff here
// Then reload tableView
self.reloadTableView()
}
func reloadTableView() {
self.tableView.reloadData()
self?.onCompleteReloading()
}