为啥在 heightForRowAt 方法中我的单元格为零?
Posted
技术标签:
【中文标题】为啥在 heightForRowAt 方法中我的单元格为零?【英文标题】:Why in heightForRowAt method my cell is nil?为什么在 heightForRowAt 方法中我的单元格为零? 【发布时间】:2018-01-10 17:21:30 【问题描述】:func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
if let cell = tableView.cellForRow(at: indexPath) as? ExpandablePlaneTableViewCell
return 400.0
return 75.0
我想更改单元格的大小,但在 heightForRowAt
内部它看不到我的 cell
并崩溃了。当我把if let
放在那里时,检查它没有进入块内,只需要75。
谁能告诉我问题是什么?这对我来说太奇怪了! 我已经将委托设置为自我。所以它调用了该函数,但无法检测到我的单元格。
更新
在我的ExpandablePlaneTableViewCell
我有一个变量:
var exapanded = false
稍后在我的 ViewController 中:单击单元格中的按钮时,我运行我的委托方法:
func expandViewButtonTapped(_ sender: ExpandablePlaneTableViewCell, for indexPath: IndexPath)
sender.exapanded = true
tableView.reloadRows(at: [indexPath], with: .automatic)
在我想扩展它并重新加载单元格之后
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "expandableCell", for: indexPath) as! ExpandablePlaneTableViewCell
cell.delegate = self
cell.indexPath = indexPath
return cell
【问题讨论】:
它无法获取单元格或单元格从不属于ExpandablePlaneTableViewCell
类型?你能检查一下吗?
不要那样做。如果单元格不可见,首先tableView.cellForRow(at:)
将返回 nil。
tableView.cellForRow(at: indexPath)
是返回 nil 还是返回不可转换为 ExpandablePlaneTableViewCell
的东西?您可以通过此时调试应用程序并查看tableView.cellForRow(at: indexPath)
的结果来验证这一点。
@Larme 但我需要知道要更改其大小的单元格是什么。我必须检查它是否被扩展了
@GiuseppeLanza 它似乎从来都不是 ExpandablePlaneTableViewCell 类型
【参考方案1】:
不要尝试在heightForRowAt
中获取单元格。在您的情况下,当然没有理由这样做。
您似乎希望某些类型的单元格的高度为一个值,而其他类型的单元格为另一个高度。
只需使用与cellForRowAt
相同的基本逻辑,基于indexPath
,即可确定要返回的高度。 换句话说,决定基于您的数据模型,而不是单元格。
【讨论】:
以及如何设置cellForRowAt
的高度。看来我没明白你的意思=/
你没有。您从cellForRowAt
返回一个单元格。你从heightForRowAt
返回高度。
当您实际创建单元格时,您将在某处出现类似if expandable: create a cell of type ExpandablePlaneTableViewCell
的内容。使用相同的逻辑。要了解它是否已扩展,您可能希望将布尔值存储在 [IndexPath: Int] 类型的字典中,这样您就不必依赖可以重用的单元格中的值。
@J.Doe 如果我的回答目前对您没有意义,请使用完整的cellForRowAt
方法更新您的问题,然后我可以用更具体的示例更新我的答案。跨度>
@rmaddy 我已经更新了我的问题。我希望它能帮助你更好地了解我以上是关于为啥在 heightForRowAt 方法中我的单元格为零?的主要内容,如果未能解决你的问题,请参考以下文章