我有一个包含14个单元格的表视图。其中一个细胞具有动态高度。
所以,我在tableView(_:heightForRowAt :)中设置这个高度
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
print(indexPath.row)
if calculatedHeight != nil && indexPath.row == 10 {
return calculatedHeight!
}
return commonCellHeight
}
我希望得到这样的打印输出:
0
1
2
...
13
这应该打印两次或更多次。那不是问题。
但我得到了:
0
0
1
2
...
12
0
1
2
...
13
有时它按预期从0到13计数,有时从0到12计数,开头有两个零。
因此,我设置了错误单元格的高度
当我检查if calculatedHeight != nil && indexPath.row == 10
时,我实际上是在设置第12行的高度,而不是根据需要设置第11行。
发生了什么?我的错误在哪里?
更新
所以,我设法解决了这个问题。
关键是我在桌子上面做了selectRow(at:animated:scrollPosition:)
的内部事情。甚至在第一次致电tableView(_:heightForRowAt:)
之前。
现在,当我删除了早期选择时,事情进展顺利,indexPath.row == 10对应于预期的第11行。
注意
我不认为这是一个很好的答案,因为我真的不明白为什么会以这种方式发生。
所以,如果你知道真正的原因,请发表你的回答,我可能会接受它。