iOS 13: NavigationBar BarStyle is ignored when using UINavigationBarAppearance

The changes for dark mode include a new UIView and UIViewController property named overrideUserInterfaceStyle. This is the preferred way to indicate that you want a specific light/dark style instead of the default behavior where we respond to the current dark mode state.

If you set this on your navigation bar or navigation controller, then you should get the behavior you expect (assuming you want light or dark everywhere). If you need more control, then it may make more sense to subclass UINavigationController to change its behavior (by overriding childViewControllerForStatusBarStyle and returning the top view controller for example).


I managed to finally to set the status bar style to white for the whole app. There are many solutions on SO but from my experience some of them can be very iOS specific, i.e. something that worked for someone on iOS 8-12 doesn't necessary mean it will work on iOS 13 with Xcode 11.

Here is my solution that works on iOS 13 with Xcode 11 (also tested on devices running iOS 12 for backwards compatibility) and UINavigationBar.appearance().standardAppearance = UINavigationBarAppearance(). In Info.plist file add the following two properties:

Info.plist properties

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>