Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS 13中以编程方式隐藏和显示状态栏?_Ios_Ios13_Uiapplication_Uistatusbar - Fatal编程技术网

如何在iOS 13中以编程方式隐藏和显示状态栏?

如何在iOS 13中以编程方式隐藏和显示状态栏?,ios,ios13,uiapplication,uistatusbar,Ios,Ios13,Uiapplication,Uistatusbar,我使用了以下常用方法来隐藏和再次显示状态栏。它在iOS 13之前工作正常,但当我为具有iOS 13或更高版本的设备运行它时,会出现以下崩溃 +(void)showStatusBar:(BOOL)show { UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"]; if ([statusBar respond

我使用了以下常用方法来隐藏和再次显示状态栏。它在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',原因:'调用了应用程序-状态栏或 -UIApplication上的statusBarWindow:此代码必须更改,因为不再有状态栏或状态栏窗口。使用 而不是窗口场景中的statusBarManager对象。”


如何仅隐藏和显示某些视图控制器的状态栏

如果要在不同的视图控制器上显示/隐藏状态栏,需要:

  • 在Info.plist中添加查看控制器基本状态栏外观的选项,并将其设置为YES
  • 在要显示/隐藏状态栏的每个视图控制器中覆盖
    var prefersStatusBarHidden:Bool
  • 如果您想动态显示/隐藏它(例如,点击按钮后),您可以执行以下操作:

    var statusBarHidden = true {
      didSet {
        setNeedsStatusBarAppearanceUpdate()
      }
    }
    
    override var prefersStatusBarHidden: Bool { 
      return statusBarHidden 
    }
    
    • 你可以在这里找到更详细的解释

    • 在for
      UIStatusBarManager
      中,您还可以找到以下报价:

    您不能使用此对象修改状态栏的配置。而是为每个UIViewController对象分别设置状态栏配置。例如,要修改状态栏的默认可见性,请覆盖视图控制器的prefersStatusBarHidden属性


    @太奇怪了。您能否再次检查是否已完成步骤1:在Info.plist中添加“查看控制器基本状态栏外观”选项,并将其设置为“是”。没有它就没有区别
    var statusBarHidden = true {
      didSet {
        setNeedsStatusBarAppearanceUpdate()
      }
    }
    
    override var prefersStatusBarHidden: Bool { 
      return statusBarHidden 
    }