阴影不在UIButtons上绘制

时间:2017-10-04 09:37:11

标签: ios swift xcode swift4

我正在将一个Swift 3项目重构为Swift 4,我遇到过这样一种情况,即之前有阴影的按钮不再会产生阴影。

我正在使用此代码绘制阴影:

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    
  }
}

我使用以下代码调用代码在viewDidLayoutSubviews中绘制阴影:

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()
    }
}

我已尝试在其他位置添加viewDidLayoutSubviews中的代码以查看是否可以将其绘制。我已经尝试了viewDidLoadviewWillLayoutSubviewsviewDidAppear等等。我尝试过编写故事板并“重新开始”,再次按下按钮,清理派生数据,查看来自终端和Xcode内的模拟器。

按钮包含在UIStackView中。我有两个水平堆栈视图,其中包含嵌入垂直堆栈视图中的两个按钮。如果有人有任何建议:还有什么可以尝试,我欢迎你的建议。谢谢你的阅读。

1 个答案:

答案 0 :(得分:1)

请尝试此代码,我已更改了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    
  }