单元格backgroundColor在插入行时清除奇怪的行为

时间:2017-03-21 23:42:57

标签: ios swift uitableview

不重复:
问题/答案是关于改变颜色。我没有问题改变单元格的颜色,而是在使用"颜色"时遇到问题。 .clear并插入一个单元格,正在重置"重置"。

每当我将单元格的背景颜色设置为.clear并在表格中插入一行时,单元格将自动"重置"到原来的状态。当背景颜色具有值时,这不会发生。

例如:

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    let gesture = UIPanGestureRecognizer()
    gesture.addTarget(self, action: #selector(handlePan))
    gesture.delegate = self

    addGestureRecognizer(gesture)

    backgroundColor = .clear
}

func handlePan(_ recognizer: UIPanGestureRecognizer) {
    if recognizer.state == .changed {
        let translation = recognizer.translation(in: self).x

        contentView.frame.origin.x += translation

        recognizer.setTranslation(.zero, in: self)
    }

    if recognizer.state == .ended {
        guard let index = delegate?.tableView.indexPath(for: self) else { return }

        delegate?.insert(index)
    }
}

我的ViewController:

func insert(_ index: IndexPath) {
    let cell = tableView.cellForRow(at: index) as? PannableCell

    items.append("some")

    let path = IndexPath(row: index.row + 1, section: index.section)

    tableView.insertRows(at: [path], with: .fade)
}

问题:
如何将单元格的背景颜色设置为.clear并插入一行而不重置单元格?我想要这个,因为在我插入了单元格之后,我想将原始单元格设置为原始单元格的原始位置。

修改
设置backgroundColor的颜色仅适用于iOS 9.在iOS 10中,它仍会以某种方式重置单元格。

2 个答案:

答案 0 :(得分:1)

将您的插入更改为:

tableView.beginUpdates()
tableView.insertRows(at: [path], with: .fade)
tableView.endUpdates()

答案 1 :(得分:1)

尝试在tableView上使用beginUpdates()endUpdates()

tableView.beginUpdates()
// insert, delete your rows here
tableView.endUpdates()

如果您不使用这些方法,最终可能会遇到各种错误,包括无效行数,UI故障等。

如果它没有帮助你可以尝试"脏修复"它通过在您的单元格的prepareForReuse方法或tableView:willDisplayCell:forRowAtIndexPath:委托方法中设置所需的颜色(尽量避免像这样的脏修复)。