菜鸟教程小白 发表于 2022-12-11 18:46:44

ios - 获取 UIStackView 中的第一个 UIButton


                                            <p><p>我正在处理我的 View ,但在堆栈 View 中的按钮周围出现阴影时遇到了问题。我所做的大部分工作都直接在 Storyboard中。</p>

<p> <img src="/image/6hjwz.png" alt="Storyboard render showing background"/> </p>

<p> <img src="/image/tGCbp.png" alt="Simulator render missing background"/> </p>

<p>这是我用来将阴影应用到 View 的方法</p>

<pre><code>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
}
</code></pre>

<p>这就是我在 <code>ViewController.swift</code></p> 的 View 中找到按钮的方式

<pre><code>for subview in self.view.subviews {
    if subview.isKind(of: UIButton.self) &amp;&amp; subview.tag == 1 {
      addShadow(to: subview)
    }
}
</code></pre>

<p>我知道问题出在堆栈 View 和堆栈 View 内的 UIView 中,其中包含按钮。 (self.view > UIStackView > UIView > )</p>

<p>我知道我可以通过 <code>for-loop</code> 中的递归来做到这一点,但我试图更精确一点以优化性能,并且更愿意一次性添加阴影。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>你有几个选择:</p>

<ol>
<li>在 Storyboard 本身中添加阴影</li>
<li>为按钮添加一个 socket ,然后在代码中添加阴影</li>
<li>将按钮添加到集合中,然后枚举集合添加阴影</li>
<li>递归添加阴影(这不会像您想象的那样严重影响性能,添加阴影比递归执行此操作更会损害性能)</li>
</ol>

<p>你是正确的,因为按钮是堆栈 View 上的一个 View ,所以你的 for 循环不会直接点击按钮来为其添加阴影。</p>

<p>到目前为止,解决这个问题的最简单方法是递归方式,或者类似的方式:</p>

<pre><code>func addShadowsTo(subviews: ) {
    for subview in subviews {
      if subview.isKind(of: UIButton.self) &amp;&amp; subview.tag == 1 {
            addShadow(to: subview)
      }

      if let stackView = subview as? UIStackView {
            addShadowToSubviews(subviews: stackView.subviews)
      }
    }
}

func viewDidload() {
    super.viewDidLoad()

    addShadowsTo(subviews: view.subviews)
}
</code></pre>

<p>如果您需要有关如何执行任何其他方式的说明,请发表评论。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 获取 UIStackView 中的第一个 UIButton,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/41948710/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/41948710/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 获取 UIStackView 中的第一个 UIButton