For anyone using a UINavigationController:
The UINavigationController
does not forward on preferredStatusBarStyle
calls to its child view controllers. Instead it manages its own state – as it should, it is drawing at the top of the screen where the status bar lives and so should be responsible for it. Therefor implementing preferredStatusBarStyle
in your VCs within a nav controller will do nothing – they will never be called.
The trick is what the UINavigationController
uses to decide what to return for UIStatusBarStyleDefault
or UIStatusBarStyleLightContent
. It bases this on its UINavigationBar.barStyle
. The default (UIBarStyleDefault
) results in the dark foreground UIStatusBarStyleDefault
status bar. And UIBarStyleBlack
will give a UIStatusBarStyleLightContent
status bar.
TL;DR:
If you want UIStatusBarStyleLightContent
on a UINavigationController
use:
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;