当我更改单元格的大小并重新加载时,为什么UITableView单元的顺序发生了变化?

时间:2017-06-15 07:47:06

标签: ios objective-c uitableview

我有一个tableView来显示一些信息,如下图。image 1

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if cellStates[indexPath.section] == .unfold {
            cellStates[indexPath.section] = .fold
        } else { 
            cellStates[indexPath.section] = .unfold
        }
        tableView.reloadData()
    }

细胞将在折叠状态下展开,如下图所示。image 2 如果再次触摸它,它应该再次折叠,如图像1。

然后问题出现了。
正如我们在图像2中看到的那样,屏幕外侧有三个单元格 No1,No2,No5 outside。而No3,No4 Inside。 No3是我们刚触及的细胞 当我再次触摸No3单元格进行折叠时,顺序变为No3,No4,No1,No2,No5。 image 3

屏幕内部的细胞似乎已被提升到顶部。 我对此感到困惑,到底发生了什么?怎么避免? 单元格的高度取决于未更改的数据源,因此会搞砸。

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
    }

0 个答案:

没有答案