4
votes

I want status bar to show up in viewWillAppear() and disappear in viewWillDisappear() of my ViewController

I was using

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];

but it is deprecated in iOS 9.0

I am using

UIApplication.shared.isStatusBarHidden = false

in swift, but in objective C this is readonly value...

prefersStatusBarHidden also does not work for me, because I need to hide status bar in viewWillDisappear() function

-(BOOL)prefersStatusBarHidden{
    return YES;
}

Can anybody help me?

3
Great question! I've been struggling with these too recently!gogachinchaladze
You can try to add the key "UIViewControllerBasedStatusBarAppearance" with value "NO" in the info.plist, also call the func setNeedsStatusBarAppearanceUpdate() if need.Quoc Le
I have "UIViewControllerBasedStatusBarAppearance - NO " in the info.plist, I need the translate "UIApplication.shared.isStatusBarHidden = false" swift code to objective CSalome Tsiramua

3 Answers

5
votes

For each view controller you want to change the visibility of the status bar you need to override prefersStatusBarHidden. For this to actually work though, you must add the following key/value in your project's Info.plist:

Key: View controller-based status bar appearance

Value: YES


To control the visibility of the status bar in viewWillAppear and viewWillDisappear you can do:

var statusBarHidden = false

override func viewWillAppear() {
    super.viewWillAppear()
    statusBarHidden = false
    self.setNeedsStatusBarAppearanceUpdate()
}

override func viewWillDisappear() {
    super.viewWillDisappear()
    statusBarHidden = true
    self.setNeedsStatusBarAppearanceUpdate()
}

override var prefersStatusBarHidden: Bool {
    return statusBarHidden
}
0
votes

For Swift 3,

override var prefersStatusBarHidden: Bool{
        return true
    }

and add viewDidLoad()

self.modalPresentationCapturesStatusBarAppearance = true
0
votes

Write example for Objective-C (The same code for SWIFT already wrote by @dennykim)

  1. Create property for BOOL

@property (nonatomic,assign) BOOL statusBarHidden;

  1. Set in info.plist View controller-based status bar appearance == YES
  2. Go to ViewController and write the next code:

-(void)viewWillAppear:(BOOL)animated{

[super viewWillAppear:animated];

self.statusBarHidden = TRUE;
[self setNeedsStatusBarAppearanceUpdate];
}
-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];

    self.statusBarHidden = FALSE;
    [self setNeedsStatusBarAppearanceUpdate];   
}

- (BOOL)prefersStatusBarHidden {
    return self.statusBarHidden;
}