Search code examples
iosswiftuiviewcontrollerstatusbar

Change Status Bar Color in Real Time


I am moving in a side menu view controller (ENSwiftSideMenu) with an animation. Since the side menu's background color is a pretty dark blue, I'd like to have the status bar, that is black by default, turn light while the menu is visible.
With View controller-based status bar appearance being set to YES (also tried NO) inside the info.plist, I tried to implement the following code which did, unfortunately, not work:

UIApplication.shared.statusBarStyle = .lightContent

Also, I tried this:

override func viewDidLoad() {
    super.viewDidLoad()
    setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default
}

Any idea how to make it work?
Thanks!


Solution

  • Try This Code:

    In your AppDelegate:

         var navigationBarAppearace = UINavigationBar.appearance()
         navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()] // If you want to change title colour
         UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default 
    

    //Update your plist with below code

         View controller-based status bar appearance = NO
    

    In your ViewController:

        override func viewDidLoad() {
        super.viewDidLoad()
    
         // UIApplication.sharedApplication().statusBarStyle = .LightContent
        navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
        navigationController?.navigationBar.shadowImage = UIImage()
        navigationController?.navigationBar.tintColor = UIColor.whiteColor()
        navigationController?.navigationBar.translucent = true
    }
    
    func sideMenuWillOpen() {
        print("sideMenuWillOpen")
    UIApplication.sharedApplication().statusBarStyle = .LightContent
    }
    
    func sideMenuWillClose() {
        print("sideMenuWillClose")
     UIApplication.sharedApplication().statusBarStyle = .Default 
    }
    

    enter image description here

    Output from the above code.You can use some sort of UIAnimation to sync the effect..

    Let me know.If the code works for you...