swift - 状态栏样式更新有一些延迟
问题描述
我StoryBoard
的项目中有 2 个,ViewController
第一个storyBoard
中的.lightContent
statusBarStyle
所有都是.ViewController
storyBoard
.default
statusBarStyle
为此,我已经完成了以下步骤。
1.View controller-based status bar appearance
是true
2 已经使用下面的代码。
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return topViewController?.preferredStatusBarStyle ?? .default
}
}
当我storyBoard
ViewController
从第一个storyBoard
statusBar 样式更改中将 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
}
请指导我缺少什么或我错误地实施了什么。任何帮助将不胜感激。谢谢
解决方案
初始视图控制器:
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
}
我找到了这样的解决方案。它工作得很好,但我不知道它有多大用处。我只是认为最好不要在另一个屏幕上进行更改。
推荐阅读
- input - 检查输入单选时显示/隐藏
- c# - 使用 API 从 Azure blob 下载
- c# - 在本地开发中使用不同的连接字符串
- scala - How to sort an Iterable without creating intermediate Seq?
- java - 尝试在 Java 中对 Google pubsub 执行同步拉取时出错
- bash - 在 bash 脚本内的自定义 shell 实例中运行命令
- html - 将页脚保持在页面底部(但当它不隐藏元素时)
- angular - 在 APP_INITIALIZER 中获取 BASE-HREF
- json - jq:使用变量来标识要附加到的内部对象键
- r - 在 R: survminer::ggsurvplot with fun = "cloglog" 返回警告消息和空图