CollectionView странное поведение при повторном использовании ячеек - PullRequest
0 голосов
/ 27 февраля 2019

Я использую пользовательскую ячейку коллекции, в которой есть переменная с именем 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
}

Это в моей пользовательской ячейке коллекции

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 голосов
/ 27 февраля 2019

если вы повторно используете свою ячейку, вы должны переопределить prepareForReuse() и удалить ранее добавленные представления, в противном случае вы просто добавите представления поверх существующих представлений.

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

С уважением

...