iOS 13中prefersStatusBarHidden问题

6

大家好,我正在尝试在视图控制器中隐藏我的状态栏,但似乎没有起作用。我使用了以下函数:


 override var prefersStatusBarHidden: Bool {
         return true
    }

我还在plist文件中将View controller-based status bar appearance设置为YES

我的状态栏不想隐藏...我错在哪里了吗?


Info.plist 中将 View controller-based status bar appearance 设置为 NO。您可以在此处检查状态栏的设置。 - Vadim Nikolaev
尝试这个:(UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow)?.isHidden = false - Keshu R.
崩溃并显示以下错误:UIApplication:此代码必须更改,因为不再有状态栏或状态栏窗口。请改用窗口场景上的statusBarManager对象。 - kAiN
@kAiN,你有没有看过我的答案?我刚刚用空项目测试了一下,在plist中将状态栏初始化隐藏设为YES,将视图控制器的状态栏外观设置为NO,没有添加任何代码 - 在iOS13.3和iPhone11上,状态栏都是隐藏的。 - Vadim Nikolaev
@VadimNikolaev 是的,我知道,但是我需要我的状态栏不仅在特定的视图控制器中可见。 - kAiN
@kAiN请查看这个解决方案。我猜它会对你的情况有用。 - Vadim Nikolaev
3个回答

11

看起来你想在单个ViewController中特别隐藏状态栏。

为了做到这一点,您需要在该ViewController中添加以下内容:

self.modalPresentationCapturesStatusBarAppearance = true

override var prefersStatusBarHidden: Bool {
      return true
}

我还在我的 .plist 中添加了 View controller-based status bar appearance,并将其设置为YES

已在最新的iOS 13上测试。


它对我有效。但在iOS 14上,我不需要设置 self.modalPresentationCapturesStatusBarAppearance = true,它也能正常工作。 - Daemonson Dong

0

如果目标视图控制器嵌入到其他容器视图控制器中,例如UINavigationController,则需要子类化该容器视图控制器并覆盖其 childForStatusBarHidden 方法,以返回目标视图控制器。


0

你可以看一下这个,你需要重写 childForStatusBarHidden 和 childForStatusBarStyle。

class CCNavigationController: UINavigationController {
    override var childForStatusBarHidden: UIViewController? {
        return self.topViewController
    }
    
    override var childForStatusBarStyle: UIViewController? {
        return self.topViewController
    }
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接