I have made following common method for hiding and showing again status bar. It works fine before iOS 13, but I am getting following crash while I run it for device having iOS 13 or greater.
+(void)showStatusBar:(BOOL)show
{
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
[[UIApplication sharedApplication] setStatusBarHidden:!show withAnimation:UIStatusBarAnimationNone];
}
}
Getting following error for iOS 13
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'App called -statusBar or -statusBarWindow on UIApplication: this code must be changed as there's no longer a status bar or status bar window. Use the statusBarManager object on the window scene instead.'
What can I do to hide and show status bar for some view controllers only?
If you want to show/hide the status bar on the different View Controllers you need to:
var prefersStatusBarHidden: Bool
in each View Controller where you want to have the status bar shown/hiddenIf you want to show/hide it dynamically (ex. after tapping on button), you could do something like this:
You could find more verbose explanation here Here
Also in the Apple Documentation for
UIStatusBarManager
you can find the following quote: