Ios 获取UIStack视图中的第一个UIButton
我正在处理我的视图,在堆栈视图中的按钮周围有阴影,这是一个问题。我所做的大部分工作都是直接在故事板中完成的 下面是我用于将阴影应用于视图的方法Ios 获取UIStack视图中的第一个UIButton,ios,swift,uiview,uibutton,uistackview,Ios,Swift,Uiview,Uibutton,Uistackview,我正在处理我的视图,在堆栈视图中的按钮周围有阴影,这是一个问题。我所做的大部分工作都是直接在故事板中完成的 下面是我用于将阴影应用于视图的方法 func addShadow(to view: UIView) { view.layer.shadowColor = shadowColor view.layer.shadowOpacity = shadowOpacity view.layer.shadowOffset = shadowOffset if let bo
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
for subview in self.view.subviews {
if subview.isKind(of: UIButton.self) && subview.tag == 1 {
addShadow(to: subview)
}
}
我知道问题源于stack视图和保存按钮的stack视图内部的UIView。(self.view>UIStackView>UIView>[UIButton,UILabel])
我知道我可以通过循环中的递归来实现这一点,但我正在尝试更精确地优化性能,并且更愿意一次添加阴影。您有几个选项:
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)
}
如果您想了解如何使用其他方法,只需发表评论。我知道阴影是一种性能影响,但它们很好地暗示了按钮是什么,因为我早期的UI Alpha测试人员没有意识到一些图标是按钮。在这种情况下,这是一种必然的罪恶,我只是不想让它复杂化。谢谢你的回复,我会试一试。即使在递归之后,按钮所在的UIView仍无法转换为stackview。相反,我喜欢将循环分解成一个单独的方法,并采纳了您的其他建议,为按钮创建了一个出口。哦,您的按钮位于堆栈视图中的视图中?是的,上面的代码对此不起作用。可以将stackView检查更改为类似于
let subviewsubviews=subview.subviews;如果subviewsubviews.count>0{