如何在tableview Cell内设置tableView的自动高度?
Posted
技术标签:
【中文标题】如何在tableview Cell内设置tableView的自动高度?【英文标题】:How to set automatic height of tableView inside tableview Cell? 【发布时间】:2019-09-18 08:52:02 【问题描述】:我有一个问题困扰了我一段时间。如何为另一个 tableview 单元格内的 tableview 设置自动高度?
所以我有 MainTableView,里面有 3 个单元格 (这个 tableview 有自动高度) 并且在 第 3 个单元格上我里面有另一个tableView (我们称它为SecondaryTableView,它对其父视图有约束)
前 2 个单元格是它工作的自动高度。
对于 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")
我已经附上了一张关于它在模拟器中的外观的图片。绿色是第一个单元格,橙色是第二个单元格(那些已注册)。我滚动了一点前 2 个单元格以查看差异。
可能是单元格上没有数据?但是我贴了一些标签,看起来都一样
【问题讨论】:
内部单元格中将包含哪种类型的内容? 从 API 解析的数据 -> 图像和一些标签 而且高度也是动态的。对吗? 所以。父级是具有 3 个单元格的 tableView。 ( 1.cell -> 具有动态高度的集合视图 .... 2. 单元格 -> 普通视图固定高度 ... 现在是第 3 个单元格,我在其中包含了另一个 tableview,它将具有动态单元格跨度> 【参考方案1】:您需要使用 UITableView 的intrinsicContentSize
变量。
为子tableView创建一个子类并覆盖 内在内容大小。
Dynamic row heights of a UITableView inside a UITableViewCell
【讨论】:
解决了我的问题。非常感谢 您好,我在 tableview 单元格中有 UITableview 我有像 Heading -> subHeading ->Detail 这样的 UI,当我点击标题时,它显示子标题,当点击子标题时它显示详细信息,但是当我快速滚动时,详细信息是不可见,但通常可以正常工作【参考方案2】:您可能需要在每个包含 tableView 的单元格处设置一个闭包,一旦 tableView 完成重新加载数据,就会调用该闭包。 从您的父 tableView,只需捕获这些闭包,然后重新加载整个 tableView(或相应的部分)。
在你的主视图控制器中
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
在你的 Cell 中,定义一个闭包
var onCompleteReloading: (() -> Void)?
func setup()
// Do some stuff here
// Then reload tableView
self.reloadTableView()
func reloadTableView()
self.tableView.reloadData()
self?.onCompleteReloading()
【讨论】:
你能举个合适的例子吗? 嘿。我已经尝试按照您在回答中所说的那样做,但没有成功。相同的显示。 请确保主控制器中的单元格已准备好进行动态高度。您能否分享有关您的代码的更多详细信息?以上是关于如何在tableview Cell内设置tableView的自动高度?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 如何设置tableview列表的cell上的的设置删除键 置顶按钮 未读信息按钮