preferredStatusBarStyle not respecting on iOS 13

Viewed 5953

I'm working in my simulator on a single view app with a dark background. It's a UIViewController wrapped in a UINavigationController.

In my view controller I have override var preferredStatusBarStyle: UIStatusBarStyle { .lightContent }

In my info.plist I have View controller-based status bar appearance = YES

And yet when I run it it shows white for a second and then jumps to having black text.

What's going on here? Is there a fix?

Edit: I've tried .default, .lightContent and .darkContent just to be sure, nothing works

2 Answers

I recently ran into this problem and these extensions seemed to fix the issue.

extension UITabBarController {
    open override var childForStatusBarStyle: UIViewController? {
        return selectedViewController?.childForStatusBarStyle ?? selectedViewController
    }
}

extension UINavigationController {
    open override var childForStatusBarStyle: UIViewController? {
        return topViewController?.childForStatusBarStyle ?? topViewController
    }
}

I just put them into a file called UIViewController+StatusBar.swift and included it in the project.

The correct answer referenced by @matt is navigationController?.navigationBar.barStyle = .lightContent in viewDidLoad.

Related