首页 > 解决方案 > 状态栏样式更新有一些延迟

问题描述

StoryBoard的项目中有 2 个,ViewController第一个storyBoard中的.lightContent statusBarStyle所有都是.ViewControllerstoryBoard.default statusBarStyle

为此,我已经完成了以下步骤。

1.View controller-based status bar appearancetrue

2 已经使用下面的代码。

extension UINavigationController {
    open override var preferredStatusBarStyle: UIStatusBarStyle {
       return topViewController?.preferredStatusBarStyle ?? .default
    }
}

当我storyBoard ViewController从第一个storyBoardstatusBar 样式更改中将 2nd 设置为 rootController 但我面临以下问题。

当我将第一个故事板设置ViewController为 rootController 时,状态栏样式会在几秒钟后更新。

不合适

在此处输入图像描述

几秒钟后

在此处输入图像描述

这是我的演示链接:https ://www.dropbox.com/s/ijqg73zm1jxbokc/statusBarDemo.zip?dl=0

更新

我的第一个 ViewController 代码

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default
}

@IBAction func btnInitialControllerTapped(_ sender: Any) {
    let controller = UIStoryboard(name: "Initial", bundle: nil).instantiateViewController(withIdentifier: "InitialViewController") as! InitialViewController
    let navController = UINavigationController.init(rootViewController: controller)
    appDelegate.window?.rootViewController = navController
}

我的第二个 ViewController 代码

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

@IBAction func btnControllerTapped(_ sender: Any) {
    let storyboard = UIStoryboard(name:"Main", bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
    let navigationController = UINavigationController(rootViewController: vc)
    appDelegate.window?.rootViewController = navigationController
}

请指导我缺少什么或我错误地实施了什么。任何帮助将不胜感激。谢谢

标签: swiftstatusbarios-statusbar

解决方案


初始视图控制器:

var status = true
override var preferredStatusBarStyle: UIStatusBarStyle {
    return status ? .lightContent : .default
}

@IBAction func btnControllerTapped(_ sender: Any) {
    self.status = false
    self.preferredStatusBarStyle
    self.setNeedsStatusBarAppearanceUpdate()
    let storyboard = UIStoryboard(name:"Main", bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
    let navigationController = UINavigationController(rootViewController: vc)
    appDelegate.window?.rootViewController = navigationController
}

我找到了这样的解决方案。它工作得很好,但我不知道它有多大用处。我只是认为最好不要在另一个屏幕上进行更改。


推荐阅读