Обновление стиля StatusBar с некоторой задержкой - PullRequest
1 голос
/ 29 апреля 2020

У меня есть 2 StoryBoard в моем проекте, и все 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
    }
}

Когда я устанавливаю 2nd storyBoard ViewController в качестве rootController из 1-го storyBoard изменения стиля statusBar, но я сталкиваюсь с проблемой ниже.

Когда я устанавливаю 1st storyBoard ViewController в качестве rootController, Обновление statusBarStyle через несколько секунд.

Не правильно

enter image description here

Через несколько секунд

enter image description here

вот моя демонстрационная ссылка: https://www.dropbox.com/s/ijqg73zm1jxbokc/statusBarDemo.zip?dl=0

ОБНОВЛЕНИЕ

МОЙ First ViewController Code

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
}

Пожалуйста, сообщите мне, что мне не хватает или что я реализовал неправильно. Любая помощь будет оценена. Спасибо

1 Ответ

1 голос
/ 30 апреля 2020

InitialViewController:

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
}

Я нашел решение, подобное этому. Это работает хорошо, но я не знаю, насколько это полезно. Я просто думаю, что лучше изменить его без go на другом экране.

...