【问题标题】:Shadows not drawing on UIButtons阴影未在 UIButtons 上绘制
【发布时间】:2017-10-04 09:37:10
【问题描述】:

我正在将一个 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 中。我有两个水平堆栈视图,其中包含两个嵌入在垂直堆栈视图中的按钮。如果有人有任何建议:还有什么可以尝试的,我欢迎您的建议。感谢您的阅读。

【问题讨论】:

    标签: ios swift xcode swift4


    【解决方案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    
      }
    

    【讨论】:

    • 就是这样!我还更改了cornerRadius。谢谢!
    猜你喜欢
    • 2012-03-03
    • 2010-11-16
    • 2013-06-08
    • 2012-02-16
    • 1970-01-01
    • 2016-04-15
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多