2017-10-04 3 views
0

Je suis en train de refactoriser un projet Swift 3 en Swift 4 et j'ai rencontré une situation où les boutons qui avaient précédemment des ombres appliquées ne dessinaient plus d'ombre.Ombres ne dessinant pas sur UIButtons

J'utilise ce code pour dessiner l'ombre:

extension UIButton { 
    func drawShadow() { 
    self.layer.drawsAsynchronously = true 
    self.layer.masksToBounds = false 
    self.layer.shadowColor = UIColor.black.cgColor 
    self.layer.shadowOffset = CGSize.zero 
    self.layer.shadowRadius = self.layer.cornerRadius 
    self.layer.shadowOpacity = 0.5  
    } 
} 

J'appelle le code pour dessiner l'ombre dans viewDidLayoutSubviews en utilisant ce code:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    buttonArray = [self.buttonOne, self.buttonTwo, self.buttonThree, self.buttonFour] 
    buttonArray.forEach { button in 
     button.subviews.filter{$0 is UIImageView}.forEach({ imageView in 
     imageView.contentMode = .scaleAspectFit 
     }) 
     button.clipsToBounds = false 
     button.drawShadow() 
    } 
} 

J'ai essayé addding le code dans viewDidLayoutSubviews dans d'autres endroits pour voir si je peux l'obtenir pour dessiner. J'ai essayé viewDidLoad, viewWillLayoutSubviews, viewDidAppear, etc. J'ai essayé de nuking le storyboard et de "recommencer", en plaçant les boutons encore une fois, en nettoyant les données dérivées, nuking le simulateur du terminal et dans Xcode.

Les boutons sont contenus dans UIStackView. J'ai deux empilements horizontaux contenant deux boutons intégrés dans une stackview verticale. Si quelqu'un a des suggestions concernant quoi d'autre essayer, je me réjouis de vos suggestions. Merci pour la lecture.

Répondre

1

S'il vous plaît essayer ce code, j'ai changé le ShadowOffset

func drawShadow() { 
    self.layer.drawsAsynchronously = true 
    self.layer.masksToBounds = false 
    self.layer.shadowColor = UIColor.black.cgColor 
    self.layer.shadowOffset = CGSize(width: 1.0, height: 2.0) 
    self.layer.shadowRadius = self.layer.cornerRadius 
    self.layer.shadowOpacity = 0.5  
    } 
+0

Ca y est! J'ai aussi changé le 'cornerRadius'. Je vous remercie! – Adrian