如何以编程方式在 iOS 13 中隐藏和显示状态栏?
Posted
技术标签:
【中文标题】如何以编程方式在 iOS 13 中隐藏和显示状态栏?【英文标题】:How to programmatically hide and show status bar in iOS 13? 【发布时间】:2020-01-27 18:46:57 【问题描述】:我已经做了以下隐藏和再次显示状态栏的常用方法。它在 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 对象。'
我可以做些什么来隐藏和显示某些视图控制器的状态栏?
【问题讨论】:
developer.apple.com/documentation/uikit/uiviewcontroller/… 【参考方案1】:如果您想在不同的视图控制器上显示/隐藏状态栏,您需要:
-
在 Info.plist 中添加 View controller-base status bar appearance 选项并将其设置为 YES
在您希望显示/隐藏状态栏的每个视图控制器中覆盖
var prefersStatusBarHidden: Bool
override var prefersStatusBarHidden: Bool
return true
如果你想动态显示/隐藏它(例如点击按钮后),你可以这样做:
var statusBarHidden = true
didSet
setNeedsStatusBarAppearanceUpdate()
override var prefersStatusBarHidden: Bool
return statusBarHidden
你可以在这里找到更详细的解释Here
同样在Apple Documentation for UIStatusBarManager
中,您可以找到以下引用:
您不使用此对象来修改状态栏的配置。相反,您为每个 UIViewController 对象单独设置状态栏配置。例如,要修改状态栏的默认可见性,请覆盖视图控制器的 prefersStatusBarHidden 属性。
【讨论】:
@coolcool1994 这很奇怪。您能否再次检查您是否已完成步骤 1:在 Info.plist 中添加“查看基于控制器的状态栏外观”选项并将其设置为 YES。没有它就没有区别以上是关于如何以编程方式在 iOS 13 中隐藏和显示状态栏?的主要内容,如果未能解决你的问题,请参考以下文章