ios - 对导航项的更改延迟显示

标签 ios swift navigationbar

在更改嵌入在 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 的项目似乎不是一个好的做法。特别是因为 titlebuttons 等项目在很大程度上依赖于 DetailViewController

现在要立即更改 navigationItem 并且考虑到关注点分离,最优选的方法是什么?

最佳答案

code添加到viewWillApear而不是viewDidLoad

override func viewWillApear() {
        super.viewWillApear()

        navigationItem.rightBarButtonItem = editButtonItem
    }

关于ios - 对导航项的更改延迟显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56305596/

相关文章:

ios - 无法在名称为 : '5JK-D5-ZKP-view-1nz-4p-isc' 的包中加载 NIB

iphone - iPhone 和服务器上的 3DES 加密不同

swift - 如何在 Swift 中将字符串转换为字典类型?

ios - Swift - 数组 - 删除一个值

python - 运行 python 脚本的 NSTask 无法打开 .py 文件

ios - 删除从 Controller 添加的导航栏中的自定义 subview

ios - UICollectionView 中的错误访问 -> UICollectionViewData _setLayoutAttributes :atGlobalIndex:

ios - 推送 UIViewController 的自定义导航栏

ios - React Native - 为什么我的自定义导航栏组件呈现在屏幕底部?

python - Flask-Nav 条件元素