func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if cellStates[indexPath.section] == .unfold {
cellStates[indexPath.section] = .fold
} else {
cellStates[indexPath.section] = .unfold
}
tableView.reloadData()
}
细胞将在折叠状态下展开,如下图所示。 如果再次触摸它,它应该再次折叠,如图像1。
然后问题出现了。
正如我们在图像2中看到的那样,屏幕外侧有三个单元格
No1,No2,No5 outside。而No3,No4 Inside。 No3是我们刚触及的细胞
当我再次触摸No3单元格进行折叠时,顺序变为No3,No4,No1,No2,No5。
屏幕内部的细胞似乎已被提升到顶部。 我对此感到困惑,到底发生了什么?怎么避免? 单元格的高度取决于未更改的数据源,因此会搞砸。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "WBCell") as! WBTableViewCell
cell.controller = self
let state = cellStates[indexPath.section]
if state == .initial {
let data = dataSource[index]
cell.initial(data: data)
cellStates[indexPath.section] = .fold
} else if state == .fold {
cell.switchTo(unFolded: false) // Update autolayout constrains via SnapKit
} else {
cell.switchTo(unFolded: true)
}
return cell
}