How to set status bar's content color to white on iOS 7

IosCocoa TouchUikitIos7

Ios 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

  1. Set "View controller-based status bar appearance” to NO in your info.list file;

  2. 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:

  1. Set 'View controller-based status bar appearance' to NO
  2. 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

Place these two keys in info.plist

enter image description here

Solution 5 - Ios

Here a short and simple solution to set status bar color White

  1. First copy this line View controller-based status bar appearance to in your .plist file and set Boolean NO;

  2. In your AppDelegate.m file under didFinishLaunchingWithOptions paste this

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES]; [[UIApplication sharedApplication] setStatusBarHidden:NO];

OR add in .plist

enter image description here

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKjulyView Question on Stackoverflow
Solution 1 - IosKjulyView Answer on Stackoverflow
Solution 2 - IosSatachitoView Answer on Stackoverflow
Solution 3 - IosDenis KozhukhovView Answer on Stackoverflow
Solution 4 - IosNaXirView Answer on Stackoverflow
Solution 5 - IosHardik ThakkarView Answer on Stackoverflow
Solution 6 - IosAnthony MarchenkoView Answer on Stackoverflow
Solution 7 - IosArash ZeinoddiniView Answer on Stackoverflow
Solution 8 - IosRajan TwanabashuView Answer on Stackoverflow
Solution 9 - IosShawnView Answer on Stackoverflow
Solution 10 - IossmileBotView Answer on Stackoverflow