ch_g
ch_g

Reputation: 63

How can I detect UIStatusBar hide and show?

I'm trying to detect hidden and show of iPhone's UIStatusBar but failed. Are there any solution can help me, like KVO or something else?

Upvotes: 6

Views: 2412

Answers (4)

iUrii
iUrii

Reputation: 13798

iOS 13

Since isStatusBarHidden and setStatusBarHidden are deprecated from iOS 13 you can check visibility of the status bar with UIStatusBarManager.isStatusBarHidden and Timer since it is not supported by KVO:

timer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true) { timer in
    if let statusBarManager = UIApplication.shared.delegate?.window??.windowScene?.statusBarManager {
        print(statusBarManager.isStatusBarHidden)
    }
}

Upvotes: -1

lassej
lassej

Reputation: 6494

From iOS 11 and up you can subclass the UIView of the view controller and override safeAreaInsetsDidChange:

override func safeAreaInsetsDidChange() {
  super.safeAreaInsetsDidChange()
  // adapt your view
}

Your view must share the top rect with the status bar for this to work. (But if it doesn't, you probably wouldn't need to detect changes anyway).

Upvotes: 2

JustSid
JustSid

Reputation: 25318

You can observe the statusBarHidden property of the shared UIApplication instance.

Simple example:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    // Do something here...
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [[UIApplication sharedApplication] addObserver:self forKeyPath:@"statusBarHidden" options:NSKeyValueObservingOptionNew context:NULL];
    [[UIApplication sharedApplication] setStatusBarHidden:YES]; // Will notify the observer about the change
}

Upvotes: 4

sumit
sumit

Reputation: 13

In UIApplication class there is a property statusBarHidden...this tell status bar hidden or not...if it return YES mean status bar is hidden...try this.

Upvotes: 0

Related Questions