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
It is possible to override this on the UINavigationBar by setting overrideUserInterfaceStyle but this will result in the back list menu (from long press on back button) also having a dark mode style appearance.
You can change the status bar colour just with a single line of code. Just updated the markdown for iOS 13 and below.
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
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With