我做了以下常见的隐藏和再次显示状态栏的方法。在iOS 13之前,它可以正常工作,但在具有iOS 13或更高版本的设备上运行它时,我遇到了崩溃的问题。
+(void)showStatusBar:(BOOL)show
{
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
[[UIApplication sharedApplication] setStatusBarHidden:!show withAnimation:UIStatusBarAnimationNone];
}
}
iOS 13出现以下错误
由于未捕获的异常而终止应用程序 “ NSInternalInconsistencyException”,原因:“应用程序名为-statusBar或 UIApplication上的-statusBarWindow:由于不再有状态栏或状态栏窗口,因此必须更改此代码。使用 而是在窗口场景上使用statusBarManager对象。'
我该怎么做才能仅对某些视图控制器隐藏和显示状态栏?
答案 0 :(得分:1)
如果要在其他View Controller上显示/隐藏状态栏,则需要:
var prefersStatusBarHidden: Bool
override var prefersStatusBarHidden: Bool {
return true
}
如果要动态显示/隐藏它(例如,点击按钮后),则可以执行以下操作:
var statusBarHidden = true {
didSet {
setNeedsStatusBarAppearanceUpdate()
}
}
override var prefersStatusBarHidden: Bool {
return statusBarHidden
}
您可以在Here
还可以在UIStatusBarManager
的{{3}}中找到以下引号:
您不使用此对象来修改状态栏的配置。相反,您可以分别为每个UIViewController对象设置状态栏配置。例如,要修改状态栏的默认可见性,请覆盖视图控制器的preferredsStatusBarHidden属性。