为什么在heightForRowAt方法中我的单元格为零?

J. *_*Doe 0 uitableview ios heightforrowatindexpath swift

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if let cell = tableView.cellForRow(at: indexPath) as? ExpandablePlaneTableViewCell {
        return 400.0
    }

    return 75.0
}
Run Code Online (Sandbox Code Playgroud)

我想改变我的细胞的大小,但heightForRowAt它内部看不到我的cell崩溃.当我放在那里if let检查它不进入块的内部,只需要75.

谁能告诉我这是什么问题?这对我来说太奇怪了!我已经将代表委托给了自己.所以它调用函数但无法在那里检测我的单元格.

UPDATE

在我的ExpandablePlaneTableViewCell我有一个变量:

var exapanded = false
Run Code Online (Sandbox Code Playgroud)

稍后在我的ViewController中:单击单元格中的按钮,我运行我的委托方法:

func expandViewButtonTapped(_ sender: ExpandablePlaneTableViewCell, for indexPath: IndexPath) {
    sender.exapanded = true
    tableView.reloadRows(at: [indexPath], with: .automatic)
}
Run Code Online (Sandbox Code Playgroud)

在我想扩展它并重新加载单元格之后

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
}
Run Code Online (Sandbox Code Playgroud)

rma*_*ddy 6

不要试图让一个细胞进入heightForRowAt.在你的情况下肯定没有理由这样做.

您似乎希望高度对于某些类型的单元格而言是一个值,对于其他类型则是另一个高度.

只需使用你有相同的基本逻辑cellForRowAt基础上,indexPath来确定要返回的高度.换句话说,根据您的数据模型做出决策,而不是基于单元格.

  • 你没有.你从`cellForRowAt`返回一个单元格.你从`heightForRowAt`返回高度. (2认同)