2017-02-07 5 views
0

Я пытаюсь добавить тень и к пользовательскому UITableViewCell, все работает нормально, но когда я прокручиваю табличное изображение, тень ячейки будет применяться многократно и делает тень толще. Вот мой код:Ячейка применяет дополнительные тени при прокрутке

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DriverCell 


     //Create space between cells 
     cell.contentView.backgroundColor = UIColor(red:0.88, green:0.94, blue:0.99, alpha:1.00) 
     let whiteRoundedView : UIView = UIView(frame: CGRect(x:8, y:10, width: self.view.frame.size.width - 15 , height:150)) 
     whiteRoundedView.layer.backgroundColor = CGColor(colorSpace: CGColorSpaceCreateDeviceRGB(), components: [1.0, 1.0, 1.0, 1.0]) 
     whiteRoundedView.layer.masksToBounds = false 
     whiteRoundedView.layer.cornerRadius = 9.0 
     whiteRoundedView.layer.shadowOffset = CGSize(width: 0, height: 0) 
     whiteRoundedView.layer.shadowRadius = 1.5 
     whiteRoundedView.layer.shadowOpacity = 0.2 
     whiteRoundedView.clipsToBounds = false 
     cell.contentView.addSubview(whiteRoundedView) 
     cell.contentView.sendSubview(toBack: whiteRoundedView) 


     return cell 
    } 
  1. По умолчанию тень
  2. Extra тень применяется

enter image description here

ответ

1

UITableViewCell является многоразовым вид. Это означает, что, когда вы вызываете cellForRow при прокрутке, тень снова применится к просмотру.

Например: Просмотры A, B, C находятся на экране, когда вы прокрутите вниз и просмотр получает скрытые, вид А будет использоваться повторно, и тень будет создана снова для просмотра А.

В вашем случае Я предлагаю в вас DriverCell, чтобы добавить тень в инициализации, как это:

class DriverCell: UITableViewCell { 

override init(frame: CGRect) { 
    super.init(frame: frame) 

    contentView.backgroundColor = UIColor(red:0.88, green:0.94, blue:0.99, alpha:1.00) 
    let whiteRoundedView : UIView = UIView(frame: CGRect(x:8, y:10, width: frame.size.width - 15 , height:150)) 
    whiteRoundedView.layer.backgroundColor = CGColor(colorSpace: CGColorSpaceCreateDeviceRGB(), components: [1.0, 1.0, 1.0, 1.0]) 
    whiteRoundedView.layer.masksToBounds = false 
    whiteRoundedView.layer.cornerRadius = 9.0 
    whiteRoundedView.layer.shadowOffset = CGSize(width: 0, height: 0) 
    whiteRoundedView.layer.shadowRadius = 1.5 
    whiteRoundedView.layer.shadowOpacity = 0.2 
    whiteRoundedView.clipsToBounds = false 
    contentView.addSubview(whiteRoundedView) 
    contentView.sendSubview(toBack: whiteRoundedView) 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

} 

Таким образом, тень будет нарисована, когда вид получает инициализирован и никогда после

+0

Спасибо! но 'awakeFromNib' был правильным решением. –