iosswiftios7statusbaruistatusbar

How to change Status Bar text color in iOS


My application has a dark background, but in iOS 7 the status bar became transparent. So I can't see anything there, only the green battery indicator in the corner. How can I change the status bar text color to white like it is on the home screen?


Solution

    1. Set the UIViewControllerBasedStatusBarAppearance to YES in the .plist file.

    2. In the viewDidLoad do a [self setNeedsStatusBarAppearanceUpdate];

    3. Add the following method:

      - (UIStatusBarStyle)preferredStatusBarStyle
      { 
          return UIStatusBarStyleLightContent; 
      }
      

    Note: This does not work for controllers inside UINavigationController, please see Tyson's comment below :)

    Swift 3 - This will work controllers inside UINavigationController. Add this code inside your controller.

    // Preferred status bar style lightContent to use on dark background.
    // Swift 3
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
    

    Swift 5 and SwiftUI

    For SwiftUI create a new swift file called HostingController.swift

    import Foundation
    import UIKit
    import SwiftUI
    
    class HostingController: UIHostingController<ContentView> {
        override var preferredStatusBarStyle: UIStatusBarStyle {
            return .lightContent
        }
    }
    

    Then change the following lines of code in the SceneDelegate.swift

    window.rootViewController = UIHostingController(rootView: ContentView())
    

    to

    window.rootViewController = HostingController(rootView: ContentView())