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