菜鸟教程小白 发表于 2022-12-11 18:59:01

ios - 在 viewDidLoad 期间设置的导航栏按钮在 iOS 11 中出现 View 之后才会出现


                                            <p><p>在 iOS 10 中,我可以确定我希望出现在 <code>viewDidLoad</code> 中的导航栏按钮列表,并且它们会在 ViewController 过渡时出现在导航栏中。</p>

<p>在 iOS 11 中,我不能再这样做了。在界面构建器中设置的任何导航栏按钮都会在 ViewController 过渡时显示,并且我的自定义按钮列表在 View 完成滑入后才会显示。更新 <code>viewWillAppear</code> 中的按钮无济于事.</p>

<p>这只是 iOS 11 中的一个错误,还是我应该做的其他事情?是否有解决方法让我可以在屏幕加载时继续显示按钮?</p>

<p>在以下示例中,我在 Storyboard 中设置了一个“默认按钮”按钮,并在 <code>viewDidLoad</code> 中使用“编辑”按钮覆盖它。该项目是<a href="https://github.com/clindsay/TestNavigationBarIconsBug" rel="noreferrer noopener nofollow">available on Github</a> .</p>

<p>iOS 10</p>

<p> <a href="/image/NOSF0.gif" rel="noreferrer noopener nofollow"><img src="/image/NOSF0.gif" alt="iOS 10 Behavior"/></a> </p>

<p>iOS 11</p>

<p> <a href="/image/dzxyU.gif" rel="noreferrer noopener nofollow"><img src="/image/dzxyU.gif" alt="iOS 11 Behavior"/></a> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>看起来问题是当 ViewController 传递给导航 Controller 时,在转换期间显示的导航栏图标似乎是固定的。到 <code>viewDidLoad</code> 被调用时,图标已经被修复了。</p>

<p>为了解决这个问题,我们需要更新 ViewController 的<code>navigationItem</code>上的导航栏图标。<em>在</em> ViewController 被推送到导航 Controller 堆栈之前。</em> p>

<p>一种方法是在 <code>awakeFromNib</code> 中设置导航栏图标。这就是@Joe 的回答正在有效地做的事情,因为在<code>awakeFromNib</code>.</p>

<p>但是,在 <code>awakeFromNib</code> 中执行此操作会阻止您考虑在 <code>prepareForSegue</code> 中 ViewController 上设置的任何属性。因此,另一种选择(也是我正在使用的)是通过在设置任何所需属性后添加行 <code>_ = controller.view</code> 来强制整个 View 加载到 <code>prepareForSegue</code> .</p>

<pre><code>override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == &#34;showDetail&#34; {
      if let indexPath = tableView.indexPathForSelectedRow {
            let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController
            ...
            _ = controller.view
      }
    }
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 viewDidLoad 期间设置的导航栏按钮在 iOS 11 中出现 View 之后才会出现,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/46689873/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/46689873/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 viewDidLoad 期间设置的导航栏按钮在 iOS 11 中出现 View 之后才会出现