You should use:
self.navigationController.navigationBar.hidden = YES;
instead of:
self.navigationController.navigationBarHidden = YES;
NavigationBar
hidden behavior can be strange if UIViewController
is child viewController of UINavigationController
.
Bellow comments are research from @Tyson and @ing0 in this answer:
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 it's
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;