我正在处理我的 View ,但在堆栈 View 中的按钮周围出现阴影时遇到了问题。我所做的大部分工作都直接在 Storyboard中。
这是我用来将阴影应用到 View 的方法
func addShadow(to view: UIView) {
view.layer.shadowColor = shadowColor
view.layer.shadowOpacity = shadowOpacity
view.layer.shadowOffset = shadowOffset
if let bounds = view.subviews.first?.bounds {
view.layer.shadowPath = UIBezierPath(rect: bounds).cgPath
}
view.layer.shouldRasterize = true
}
这就是我在 ViewController.swift 的 View 中找到按钮的方式
for subview in self.view.subviews {
if subview.isKind(of: UIButton.self) && subview.tag == 1 {
addShadow(to: subview)
}
}
我知道问题出在堆栈 View 和堆栈 View 内的 UIView 中,其中包含按钮。 (self.view > UIStackView > UIView > [UIButton, UILabel])
我知道我可以通过 for-loop 中的递归来做到这一点,但我试图更精确一点以优化性能,并且更愿意一次性添加阴影。
Best Answer-推荐答案 strong>
你有几个选择:
- 在 Storyboard 本身中添加阴影
- 为按钮添加一个 socket ,然后在代码中添加阴影
- 将按钮添加到集合中,然后枚举集合添加阴影
- 递归添加阴影(这不会像您想象的那样严重影响性能,添加阴影比递归执行此操作更会损害性能)
你是正确的,因为按钮是堆栈 View 上的一个 View ,所以你的 for 循环不会直接点击按钮来为其添加阴影。
到目前为止,解决这个问题的最简单方法是递归方式,或者类似的方式:
func addShadowsTo(subviews: [UIView]) {
for subview in subviews {
if subview.isKind(of: UIButton.self) && subview.tag == 1 {
addShadow(to: subview)
}
if let stackView = subview as? UIStackView {
addShadowToSubviews(subviews: stackView.subviews)
}
}
}
func viewDidload() {
super.viewDidLoad()
addShadowsTo(subviews: view.subviews)
}
如果您需要有关如何执行任何其他方式的说明,请发表评论。
关于ios - 获取 UIStackView 中的第一个 UIButton,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/41948710/
|