在更改嵌入在 NavigationController
中的 ViewController
内的 navigationItem
的属性时,我遇到了延迟。
考虑 XCode 提供的 Master-Detail-App 示例:它包含一个 MasterViewController
以及一个到 DetailViewController
的 segue。我现在尝试在 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
}
}
}
对我来说,从 MasterViewController
内修改 navigationBar
的项目似乎不是一个好的做法。特别是因为
title
和 buttons
等项目在很大程度上依赖于 DetailViewController
。
现在要立即更改 navigationItem
并且考虑到关注点分离,最优选的方法是什么?
最佳答案
将code
添加到viewWillApear
而不是viewDidLoad
override func viewWillApear() {
super.viewWillApear()
navigationItem.rightBarButtonItem = editButtonItem
}
关于ios - 对导航项的更改延迟显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56305596/