对NavigationItem的更改延迟显示

时间:2019-05-25 14:10:51

标签: ios swift navigationbar

更改navigationItem中嵌入的ViewController内部的NavigationController的属性时,我面临着延迟。

请考虑XCode提供的示例Master-Detail-App:它包含一个MasterViewController和一个DetailViewController的序列。我现在尝试自定义DetailViewController的viewDidLoad方法内的导航栏。

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
       }
    }
}

在我看来,从navigationBar内修改MasterViewController的项目不是一个好的做法。特别是因为 titlebuttons之类的项目在很大程度上取决于DetailViewController

现在,最优选的方式是立即更改navigationItem并考虑到关注点分离的情况?

1 个答案:

答案 0 :(得分:0)

code添加到viewDidApear而不是viewDidLoad

override func viewDidAppear() {
        super.viewDidAppear()

        navigationItem.rightBarButtonItem = editButtonItem
    }