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

时间:2017-11-16 07:33:30

标签: ios swift uitableview height row

我正在尝试根据标识符设置表视图中每个单元格的高度。我不想使用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
    }
}

错误就在这一行:

let cell = tableV.cellForRow(at: indexPath)

谢谢。

4 个答案:

答案 0 :(得分:3)

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

这意味着您不应试图通过查看单元格来确定要返回的高度,而应尝试使用模型计算出高度。

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

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

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

if someCondition {
    return 200
} else {
    return 360
}

答案 1 :(得分:1)

谈论UITableView生命周期

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

之前打电话

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

因此我想你的

func cellForRow(at indexPath: IndexPath) -> UITableViewCell?

返回nil

答案 2 :(得分:0)

选择tableView时似乎错了。您在函数tableV中使用tableView而不是heightForRowAt indexPath。让我们改变它,然后再试一次,即使这不是我脑海里最好的方法。

答案 3 :(得分:-1)

First duque cell

Integer a[] = { 10, 20, 30, 10, 10, 20, 50, 60, 50, 50 };
Set<Integer> noDuplicateInt = new HashSet<>();
Map<Integer, Integer> numOccurenceMap = new HashMap<>();
for (Integer integer : a) {
    if (noDuplicateInt.add(integer)) {
        numOccurenceMap.put(integer, 1);
    } else {
        numOccurenceMap.replace(integer, numOccurenceMap.get(integer) + 1);
    }
}
System.out.println(numOccurenceMap); 

之后设置单元格高度,如你所愿。