How to set status bar's content color to white on iOS 7
IosCocoa TouchUikitIos7Ios Problem Overview
My App’s background colour is black. Cause the whole view is below the status bar on iOS 7, the content on the status bar will hard to be distinguished. So how to change status bar’s content colour to white?
I've tried preferredStatusBarStyle
and several other ways, but failed.
Ios Solutions
Solution 1 - Ios
-
Set "View controller-based status bar appearance” to NO in your info.list file;
-
Insert
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
to
-application:didFinishLaunchingWithOptions:
of the AppDelegate.m.
Note: UIStatusBarStyleDefault
is the default value for the status bar style, it'll show black content instead. Both UIStatusBarStyleBlackTranslucent
& UIStatusBarStyleBlackOpaque
are deprecated in iOS 7.0.
UPDATE for iOS 9:
As @ZakariaDarwish mentioned, the method -setStatusBarStyle
is deprecated in iOS 9. (Note: The original question was asked for iOS 7 long time ago, and I don't support it now, the new solution below works for me under iOS 9, hence update here.)
So, the only way left (at least for now) is to implement -preferredStatusBarStyle
in your view controller (remember to set "View controller-based status bar appearance" back to YES).
You can invoke UIViewController's instance method -setNeedsStatusBarAppearanceUpdate
once value changed in -preferredStatusBarStyle
or -prefersStatusBarHidden
.
There're also two methods -childViewControllerForStatusBarStyle
& -childViewControllerForStatusBarHidden
to return the preferred style from child view controller as you want.
e.g., if you used below methods
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
to switch status bar style before, you can use code sample below
- (void)shouldChangeStatusBarStyleToLightContent:(BOOL)toLightContent
animated:(BOOL)animated
{
_shouldChangeStatusBarStyleToLightContent = toLightContent;
if (animated) {
[UIView animateWithDuration:.3f animations:^{ [self setNeedsStatusBarAppearanceUpdate]; }];
} else {
[self setNeedsStatusBarAppearanceUpdate];
}
}
- (UIStatusBarStyle)preferredStatusBarStyle
{
return (_shouldChangeStatusBarStyleToLightContent ? UIStatusBarStyleLightContent : UIStatusBarStyleDefault);
}
for this updated solution now.
Solution 2 - Ios
In your *-Info.plist file:
- Set 'View controller-based status bar appearance' to NO
- Set 'Status bar style' to UIStatusBarStyleLightContent
Alternatively you can specify Status bar style as 'Black Opaque' or 'Black Translucent' in General tab of the Target.(in Xcode 5.0.1) But they are obsoleted values.
Solution 3 - Ios
I use this in main controller:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
Solution 4 - Ios
Solution 5 - Ios
Here a short and simple solution to set status bar color White
-
First copy this line
View controller-based status bar appearance
to in your .plist file and set BooleanNO
; -
In your AppDelegate.m file under didFinishLaunchingWithOptions paste this
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES]; [[UIApplication sharedApplication] setStatusBarHidden:NO];
OR add in .plist
Solution 6 - Ios
iOS 9 (deprecated warning workaround)
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
Solution 7 - Ios
#ifdef __IPHONE_7_0
# define STATUS_STYLE UIStatusBarStyleLightContent
#else
# define STATUS_STYLE UIStatusBarStyleBlackTranslucent
#endif
[[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES];
Solution 8 - Ios
If your application have different status bar's content color for each view controller the preferred method would be implementing
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
If you need to change the bar's content color globally throughout the application then add following lines of code in your didFinishLaunchingWithOptions method in AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarStyle = .lightContent
return true
}
Wait setting the statusBarStyle does nothing if your application is using the default UIViewController-based status bar system. For this
Set "View controller-based status bar appearance” to NO in your info.list file
Solution 9 - Ios
Just a note, since this was there. If you are using a UINavigationController, you can throw this into the view controllers viewDidLoad
method:
self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
Solution 10 - Ios
To do it programmatically in Swift 3 try this anywhere in your view controller.
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
I also set the plist key "View controller-based status bar appearance" to YES.