首页 > 解决方案 > 对 navigationItem 的更改延迟显示

问题描述

在更改嵌入在 a中的 anavigationItem内部的属性时,我面临延迟。ViewControllerNavigationController

考虑 XCode 提供的 Master-Detail-App 示例:它包含 aMasterViewController和 a 的 segue DetailViewController。我现在正在尝试viewDidLoad在 DetailViewController 的方法中自定义导航栏。

class DetailViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        //delay if the button (or any other property) is set here
        navigationItem.rightBarButtonItem = editButtonItem
    }
}

将显示对导航栏的更改,但有明显的延迟。但是,如果对导航栏的更改是从内部进行的,那么MasterViewController一切都非常顺利:

class MasterViewController: UIViewController {

    ...

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showDetail" {
                let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController

                //no delay if the button would instead be set here
                //navigationItem.rightBarButtonItem = editButtonItem
       }
    }
}

对我来说navigationBarMasterViewController. 特别是因为 和 等项目title严重buttons依赖于DetailViewController.

现在,在考虑关注点分离的情况下,立即更改最可取的方法是什么?navigationItem

标签: iosswiftnavigationbar

解决方案


添加codeviewWillApear而不是viewDidLoad

override func viewWillApear() {
        super.viewWillApear()

        navigationItem.rightBarButtonItem = editButtonItem
    }

推荐阅读