我制定了以下隐藏和再次显示状态栏的常用方法。它在 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 对象。
如何仅隐藏和显示某些视图控制器的状态栏?
如果您想在不同的视图控制器上显示/隐藏状态栏,您需要:
- Add 查看基于控制器的状态栏外观Info.plist 中的选项并将其设置为YES
- 覆盖
var prefersStatusBarHidden: Bool
在每个您想要显示/隐藏状态栏的视图控制器中
override var prefersStatusBarHidden: Bool {
return true
}
如果您想动态显示/隐藏它(例如,点击按钮后),您可以执行以下操作:
var statusBarHidden = true {
didSet {
setNeedsStatusBarAppearanceUpdate()
}
}
override var prefersStatusBarHidden: Bool {
return statusBarHidden
}
您可以在这里找到更详细的解释Here https://medium.com/@craiggrummitt/the-mysterious-case-of-the-status-bar-d9059a327c97
也在苹果文档 https://developer.apple.com/documentation/uikit/uistatusbarmanager for UIStatusBarManager
你可以找到以下引用:
您不使用该对象来修改状态栏的配置。相反,您可以为每个 UIViewController 对象单独设置状态栏配置。例如,要修改状态栏的默认可见性,请覆盖视图控制器的prefersStatusBarHidden属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)