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 == "showDetail" {
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]