iOS 7 and later: set status bar style per view controller
In Swift I was able to do this by writing:
let tbc : UITabBarController = self.window?.rootViewController as UITabBarController
var moreViewController : UINavigationController = tbc.moreNavigationController
moreViewController.navigationBar.barStyle = UIBarStyle.Black
Basically you're interested in the last line.
This resulted in tabbar changing to white:
Note that I didn't change anything in Info.plist
in order to achieve this result.
For more informations regarding changing Navigation Status Bar
, please check out this link:
http://www.appcoda.com/customize-navigation-status-bar-ios-7/
EDIT: This solution is deprecated on iOS 9. Please choose one of the other answers.
With UIViewControllerBasedStatusBarAppearance
set to NO, I was able to set the style to white text by using:
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;
This is because the text color on this style was white on iOS 6 and below.
UPDATE: According to @jowie you can try that on iOS8:
[UIApplication sharedApplication].statusBarStyle = UIBarStyleBlack;
There is a catch here if your view controller is inside standalone UINavigationController and not a part of Storyboard based UINavigationController then above all methods fail. I came across this situation and then in order to set the status bar to light style i used following
[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
This worked perfectly for me.
Have you tried this?
Set "View controller-based status bar appearance" (
UIViewControllerBasedStatusBarAppearance
) toYES
in your Info.plist. (YES
is the default, so you can also just leave this value out of your plist.)In your viewDidLoad method, call
[self setNeedsStatusBarAppearanceUpdate]
.Implement
preferredStatusBarStyle
, returning the status bar style that you want for this view controller.- (UIStatusBarStyle) preferredStatusBarStyle { return UIStatusBarStyleLightContent; }