gpt4 book ai didi

ios - 嵌入了 containerView 的静态单元格上的动态高度

转载 作者:行者123 更新时间:2023-11-28 12:16:08 26 4
gpt4 key购买 nike

我想使用自动布局实现期望的行为(或者如果这不可能使用委托(delegate)或其他东西)。我有一个带有一个静态单元格的 tableView,这个单元格有一个 containerView,它有一个带有动态原型(prototype)单元格的 tableViewController。

我想要的是能够使用自动布局来动态设置嵌入了容器 View 的静态单元格的高度。

这是 Storyboard:

enter image description here

这些是我的约束(带有容器 View 的 contentView 的静态单元格):

enter image description here

在静态单元格内有 containerView 的 viewController 中,我所拥有的是 ViewDidLoad 方法:

override func viewDidLoad() {
super.viewDidLoad()

courseDetailTableView.estimatedRowHeight = 200
courseDetailTableView.rowHeight = UITableViewAutomaticDimension
}

并将 tableView 的委托(delegate)与 staticCell 一起使用:

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

但是有了这个,静态单元格的高度真的很小......这意味着自动布局不能只用我设置的约束来设置他的内容的高度......我只说约束因为如果我在 containerView 的 contentView 上设置了另一个约束,将高度设置为 400,然后该单元格的高度为 400..

我只是想知道是否有自动布局的方法来设置静态单元格的高度以匹配 containerView 的高度。

我知道也许使用一个委托(delegate)首先计算 containerView 的高度并使用这个高度来设置 heightForRow 可能可行我想知道是否有更简单的方法

非常感谢。

最佳答案

我只想为面临同样问题的人回答我自己的问题。它不一定是静态单元格,这个答案适用于静态和动态单元格。

你所要做的就是在containerViewController中设置一个属性或者一个计算高度的方法(不要忘记请求layoutIfNeeded)

func tableViewHeight() -> CGFloat {
tableView.layoutIfNeeded()
return tableView.contentSize.height
}

然后在主视图 Controller (具有嵌入 containerViewController 的单元格的 Controller )中,您必须保存对 containerViewController 的引用,例如在准备 segue 方法中,如下所示:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "containerSegue" {
guard let containerVC = segue.destination as? SessionCoordinatorController else { return }
sessionController = containerVC
}
}

然后像这样(在 masterViewController 中)在 UITableView heightForRowAt 的委托(delegate)方法中请求容器高度:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
guard let height = sessionController?.tableViewHeight() else { return UITableViewAutomaticDimension }
return height
}

就这样

不要忘记在 containerViewController 中将 tableView.isScrollEnabled 添加为 false

关于ios - 嵌入了 containerView 的静态单元格上的动态高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46524245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com