简体   繁体   中英

Show/Hide status bar in only one ViewController, objective C, iOS

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?

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
}

For Swift 3,

override var prefersStatusBarHidden: Bool{
        return true
    }

and add viewDidLoad()

self.modalPresentationCapturesStatusBarAppearance = true

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;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM