Salome Tsiramua
Salome Tsiramua

Reputation: 763

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?

Upvotes: 6

Views: 4510

Answers (3)

Genevios
Genevios

Reputation: 1145

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

  1. Create property for BOOL

    @property (nonatomic,assign) BOOL statusBarHidden;
    
  2. Set in info.plist View controller-based status bar appearance == YES

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

Upvotes: 1

Ali BOZOĞLU
Ali BOZOĞLU

Reputation: 188

For Swift 3,

override var prefersStatusBarHidden: Bool{
        return true
    }

and add viewDidLoad()

self.modalPresentationCapturesStatusBarAppearance = true

Upvotes: 1

dennykim
dennykim

Reputation: 331

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
}

Upvotes: 5

Related Questions