setStatusBarHidden is deprecated in iOS 9.0

I am upgrading my code from iOS 8 to iOS 9. I have a code snippet in my program [[UIApplication applicationName] setStatusBarHidden:YES];.

I am getting the warning "setStatusBarHidden is deprecated in iOS 9.0, Use -[UIViewController prefersStatusBarHidden". If I just replace 'setStatusBarHidden' with 'prefersStatusBarHidden', I get 'instance method not found'. Can someone please suggest me how to solve this problem?


Solution 1:

Add below code to your view controller..

 - (BOOL)prefersStatusBarHidden {

   return NO;
}

Note :

  • If you change the return value for this method, call the setNeedsStatusBarAppearanceUpdate method.
  • For childViewController, To specify that a child view controller should control preferred status bar hidden/unhidden state, implement the childViewControllerForStatusBarHidden method.

Solution 2:

prefersStatusBarHidden is available from iOS 7+.

Use this in Your UIViewController class

   var isHidden = true{
        didSet{
            self.setNeedsStatusBarAppearanceUpdate()
        }
    }
    override var prefersStatusBarHidden: Bool {
        return isHidden
    }

enter image description here

If you change the return value for this method, call the setNeedsStatusBarAppearanceUpdate() method. To specify that a child view controller should control preferred status bar hidden/unhidden state, implement the childViewControllerForStatusBarHidden method.

Solution 3:

you have to add method in yourViewController.m

- (BOOL)prefersStatusBarHidden {

   return NO;
}

Solution 4:

Swift 3.1 Xcode 8.2.1

  1. Change in info.plist the row View controller-based status bar appearance and set it to NO

  2. In your target settings tick "Hide Status bar"

Both steps are required