重用单元格时CollectionView的奇怪行为

时间:2019-02-27 13:53:26

标签: ios swift collectionview

我正在使用一个自定义collectionview单元,该单元具有一个称为views的变量。 由于某种原因,我在错误的单元格中获得了视图,有时它也会复制自身。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: docCellId, for: indexPath) as! DocumentCell
    cell.backgroundColor = .white
    cell.indexPath = indexPath
    cell.views = dic[indexPath] ?? [(UIView(),CGRect.zero)]
    cell.label.text = "\(indexPath.row)"
    return cell
}
  

这是在我的自定义collectionview单元格中

var views : [(UIView, CGRect)] = [] {
    didSet {
         addViews()
    }
}

fileprivate func addViews() {
    for i in views {
        addSubview(i.0)
        i.0.anchor(top: topAnchor, left: leftAnchor, bottom: nil, right: nil, paddingTop: i.1.origin.y, paddingLeft: i.1.origin.x, paddingBottom: 0, paddingRight: 0)
    }
}

1 个答案:

答案 0 :(得分:3)

如果您重复使用单元格,则应覆盖prepareForReuse()并删除以前添加的视图,否则您将只是在现有视图之上添加视图。

override func prepareForReuse() {
        views.forEach { $0.0.removeFromSuperview() }
        views = []
    }

致谢