我正在将一个 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
中的代码,看看是否可以绘制它。我尝试过 viewDidLoad
、viewWillLayoutSubviews
、viewDidAppear
等。我尝试通过布置再次按下按钮,清除派生数据,从终端和 Xcode 中对模拟器进行核对。
按钮包含在 UIStackView
中。我有两个水平堆栈 View ,其中包含两个嵌入垂直堆栈 View 中的按钮。如果有人有任何建议:还有什么可以尝试的,我欢迎您提出建议。感谢您的阅读。
最佳答案
请尝试这段代码,我已经更改了 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
}
关于ios - 阴影不在 UIButtons 上绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46561612/