prepareForReuse не работает должным образом с imageView

Я пытаюсь добавить нижнюю границу для просмотра изображений, когда моя функция isLive возвращает true. Я проверил часть, и она выполняется только один раз. Однако есть несколько ячеек с синей нижней границей. Этот код выглядит так:

DispatchQueue.main.async {
    if CommunityViewController().isLive(startTime: startTime, endTime: endTime, name: self.cellChannel[indexPath.row].communityName){
        cell.imageView.addBottomBorderWithColor(color: constants.waterblue, width: 3)
        }
    }

И мой addBottomBorderWithColor является расширением и выглядит так:

  func addBottomBorderWithColor(color: UIColor, width: CGFloat) {
    let border = CALayer()
    border.backgroundColor = color.cgColor
    border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: width)
    self.layer.addSublayer(border)
}

Насколько я знаю, мне нужно удалить нижнюю границу в функции prepareForReuse. Я пытался удалить его с другим расширением:

 func removeBottomBorderWithColor(color: UIColor, width: CGFloat) {
    let border = CALayer()
    border.backgroundColor = color.cgColor
    border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: width)
    self.layer.addSublayer(border)
    border.removeFromSuperlayer()
}

Правильно ли подходит prepareForReuse или мне нужно установить его по-другому?

Я называю prepareForReuse следующим образом:

  override func prepareForReuse() {
    self.imageView?.removeBottomBorderWithColor(color: constants.waterblue, width:3)
}

1 ответ

self.imageView?.layer.sublayers?.forEach { $0.removeFromSuperlayer() }

попробуйте поместить этот код непосредственно в метод подготовки к повторному использованию. Добавьте слой в метод cellForItemAtIndexPath.

Другие вопросы по тегам