通过标识符设置表格视图单元格高度 - Swift

yas*_*r h 3 height row uitableview ios swift

我试图根据标识符设置表格视图中每个单元格的高度。我不想使用 indexPath.row,因为我正在从包含每个单元格类型标志的数组中填充单元格,并且顺序是随机的。正好 3 种类型的细胞。

我使用了这段代码,但它导致了一个错误:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    let cell = tableV.cellForRow(at: indexPath)
    if(cell?.reuseIdentifier == "homeFeaturedR"){
        return 200
    }else{
       return 360
    }
}
Run Code Online (Sandbox Code Playgroud)

错误在这一行:

let cell = tableV.cellForRow(at: indexPath)
Run Code Online (Sandbox Code Playgroud)

谢谢你。

Swe*_*per 5

您的heightForRowAt方法在之前被调用cellForRowAt。这意味着在heightForRowAt调用时,尚未创建该索引路径处的单元格。因此,您无法访问它reuseIdentifier或类似的东西。

这意味着与其试图通过查看单元格来确定返回的高度,不如尝试使用模型来确定高度。

动态表视图应该有一个数据源/模型。你的表视图也应该有一个。看看你的cellForRowAtIndexPath方法,在什么条件下你用标识符出列一个单元格homeFeatureR?它很可能是一个检查某些东西的 if 语句:

if someCondition {
    let cell = tableView.dequeueReusableCell(withIdentifier: "homeFeatureR")!
    // set properties
    return cell
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以检查是否someCondition为真,如果为真,则表示单元格的标识符必须是“homeFeatureR”,这意味着您应该返回 200。

if someCondition {
    return 200
} else {
    return 360
}
Run Code Online (Sandbox Code Playgroud)