当前位置: 首页 > 知识库问答 >
问题:

Swift:仅在一个子视图控制器上隐藏状态栏

端木令雪
2023-03-14

我有一个问题,当它涉及到状态栏和隐藏它。

我有一个具有幻灯片菜单的BaseViewController。这个BaseViewController也是应用程序[的根控制器,设置在应用程序中]:

window = UIWindow()
window?.makeKeyAndVisible()
window?.rootViewController = BaseController()

只要我选择一个菜单项,BaseViewController就会被相应的ViewController填充[在我将其嵌入导航控制器之后]。

菜单项A:ViewControllerA

菜单项B: ViewControlllerB

菜单项C: ViewControlllerC

假设我选择菜单项A(以下代码发生在BaseViewController中):

let activeVC = UINavigationController(rootViewController: ViewControllerA())
view.addSubview(activeVC.view)
addChild(activeVC)

当我选择另一个菜单项(比如B项)时,我首先移除先前的活动视图控制器(在本例中为A项),然后以与ViewControllerA相同的方式添加ViewControllerB:

这是我如何删除以前的活动视图控制器:

activeVC.view.removeFromSuperview()
activeVC.removeFromParent()

在plist control中,我将基于视图控制器的状态栏外观设置为YES状态栏在每个视图控制器中的外观:

然后我进入ViewController,我想隐藏状态栏,我添加以下代码:

override var prefersStatusBarHidden: Bool {
    return true
}

如果我想在任何ViewController A、B或C中隐藏状态栏,我不能。重写首选项StatusBarHidden并将其设置为"true"将无济于事。

如果我覆盖prefersStatusBarHidden并将其设置为BaseViewController中的“true”,则BaseViewController以及任何ViewController A、B和C都将隐藏状态栏。

我想能够隐藏状态栏上的ViewControlllerB而不隐藏它的其余部分。也是一百万美元,但我会解决方案!

提前感谢!

共有1个答案

邹嘉荣
2023-03-14

您需要覆盖var childForStatusBarHidden:UIViewController 用于BaseControllerUINavigationController。例如:

override var childForStatusBarHidden: UIViewController? {
    return children.first
}

extension UINavigationController {

    open override var childForStatusBarHidden: UIViewController? {
        return topViewController
    }
}

 类似资料:
  • 我想在第一个控制器中隐藏状态栏,但也希望它出现在lightContent中的第二个控制器中。 我用了: 对于光含量和 隐藏状态栏。 我的问题是,在. plist文件中将基于视图控制器的状态栏外观设置为是/否将禁用一个或另一个。

  • 我的项目中有多个故事板。我在一个故事板中有一个主页面浏览量控制器,我在一个单独的故事板中有一个安装视图控制器嵌入导航控制器。现在,当我从主页视图控制器中显示安装视图控制器导航控制器时,状态栏不会隐藏。但是当我将安装视图控制器故事板设置为info.plist中的主故事板文件库,并且安装视图控制器导航控制器是第一个呈现的视图时,状态栏将隐藏。我正在使用下面的代码隐藏状态栏。有人能告诉我当状态视图控制器

  • 问题内容: 我没有找到有关此问题的文章,但没有一个解决我的问题。 就像我说的那样。 ViewControllerA ViewControllerB 我试图将添加为的子视图,但是它 抛出类似“ ” 的错误。 下面是代码… ViewControllerA ViewControllerB只是一个带有标签的简单屏幕。 ViewControllerB EDIT 根据用户答案的​​建议解决方案,ViewCon

  • 问题内容: 我正在为网站创建流畅的布局。我正在尝试在移动视图中隐藏一个或整个内容的内容,而不是在平板电脑和台式机视图中隐藏。 到目前为止,这就是我所得到的… 我将移动版式的显示设置为“无”,并在平板电脑/台式机版式上将其设置为“阻止” …有没有更简单的方法? 问题答案: 您将需要两件事。第一种是在特定屏幕尺寸下激活特定代码,用于响应式设计。第二个是属性的使用。一旦浏览器/屏幕达到600像素,则将被

  • 我找到了一些关于这个问题的帖子,但是没有一个能解决我的问题。 说像我已经... ViewControlllerA ViewControlllerB 我试图将ViewControlllerB添加为ViewControlllerA中的子视图,但是,它抛出了一个错误,如""。 下面是代码。。。 视图控制器 ViewControllerB只是一个带有标签的简单屏幕。 视图控制器B 编辑

  • 我有一个视图控制器,这是导航控制器的rootVc。 我需要为rootview控制器隐藏导航栏,因此我使用以下方法来隐藏它并使其重新出现。 我基本上是在rootVc中隐藏导航栏,并为所有其他视图控制器显示它。 但当我移除导航栏时,我看到我的内容正在状态栏下扩展 有办法解决这个问题吗?