Слои укладки UITableViewCell

#ios #swift #uitableview #overlay #calayer

#iOS #swift #uitableview #наложение #calayer

Вопрос:

У меня есть пользовательский, UITableViewCell который содержит изображение, я добавил расширение к UIImageView , которое добавляет к нему слой для наложения более светлого цвета.

введите описание изображения здесь

 func overlay(widht: CGFloat, height: CGFloat, color: UIColor) {
    let colorOverlay = CALayer()
    colorOverlay.frame = CGRect(x: 0, y: 0, width: widht, height: height)
    colorOverlay.backgroundColor = color.cgColor
    
    self.layer.addSublayer(colorOverlay)
    self.layer.masksToBounds = true
}
  

Проблема здесь в том, что каждый раз, когда ячейка используется повторно, слой добавляется, и, таким образом, они складываются до тех пор, пока изображение больше не будет видно, и все, что видно, это серый прямоугольник

введите описание изображения здесь

 self.image.overlay(widht: self.image.frame.width, height: self.image.frame.height, color: UIColor.gray)
  

Как я мог бы предотвратить укладку слоя? Или как я мог бы добавить наложенный цвет к изображению без использования CALayer() , который работает с повторно используемыми ячейками

Ответ №1:

Проблема должна заключаться в том, что вы добавляете наложение в свой вид изображения каждый раз, когда настраиваете свою ячейку. Имейте в виду, что UITableView повторно использует один и тот же экземпляр ячейки, если это применимо. Что делать, чтобы управлять вашим визуальным выводом, полностью открыто. Но убедитесь, что если ваш код выполняется дважды, это не приведет к какой-либо разнице или ограничит выполнение этого фрагмента кода только один раз, на чем вам следует сосредоточиться здесь.

Комментарии:

1. Каким был бы способ добавить слой CALayer к изображению внутри повторно используемой ячейки, который не будет применяться каждый раз, когда ячейка используется повторно? Я думал об использовании флага, но где я мог бы его использовать? Внутри cellForRowAt ?