【问题标题】:Status bar won't disappear状态栏不会消失
【发布时间】:2013-07-19 18:42:55
【问题描述】:

我正在创建一个应用程序,我希望隐藏状态栏。当我测试应用程序时,状态栏是隐藏的,而启动屏幕显示,但一旦应用程序完全加载,状态栏就会重新出现。

我正在使用 Xcode 5 和 iOS 7,并尝试以编程方式禁用状态栏

  ([[UIApplication sharedApplication] setStatusBarHidden:YES    
      withAnimation:UIStatusBarAnimationFade];),

在 info.plist 文件中,并在 .xib 文件中使用属性检查器。似乎没有任何效果。

有什么想法吗?

【问题讨论】:

    标签: hidden statusbar ios7 xcode5


    【解决方案1】:

    尝试将以下方法添加到应用的根视图控制器:

    - (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
    

    【讨论】:

    • 如何在全局范围内做到这一点?
    • 另外,如 Apple 文档中所述,您应该在使用默认值以外的其他值(默认值为 NO)调用此方法后调用 [self setNeedsStatusBarAppearanceUpdate];
    • @PsychoDad 检查我的答案以获得更全球性的解决方案。
    • 完美,谢谢。我只是不明白为什么 iOS 7 会这样做并且不尊重包含 NO 状态栏设置的 XIB!
    • 在添加到堆栈的 ViewController 上添加它是我在该 viewcontroller 中隐藏状态栏所需的全部内容;移除此视图控制器后,状态栏将返回。
    【解决方案2】:

    您应该将此值添加到 plist:“查看基于控制器的状态栏外观”并将其设置为“NO”。

    这将使您能够将状态栏设置为隐藏模式。与其他提供的答案不同,这会将其设置为全局。

    更新:如果您希望状态栏在初始屏幕上隐藏,请不要忘记在目标状态栏选项上标记“在应用程序启动期间隐藏”。 此外,如果您不想在应用程序内使用代码,您可以在 plist 上将“状态栏最初隐藏”添加到“YES”。 p>

    【讨论】:

    • 我花了很多时间才弄清楚这一点。这是我认为每个人都会遇到的问题,而 Apple 没有提到足够多的问题。很高兴为您提供帮助...
    • 工作正常,不要忘记将“状态栏最初隐藏”的 .plist 值设置为 YES。
    • 哇,这是唯一适用于 Kobold2d 2.1.0 和 iOS 7 的东西,非常感谢!
    • Apple 并不是真正的向后兼容性的拥护者。让我们都跟着他们的长笛跳舞,并更新我们的每一个应用程序。对不起,发泄不满。苹果造成的。
    • 终于对我有用了。因为 -(BOOL)prefersstatusbarhidden 方法在模型视图中不起作用。
    【解决方案3】:

    您发布的代码适用于 iOS 6.1 及更低版本。对于 iOS 7,Apple 提供了直接控制每个视图的状态栏的新方法。在 Info.plist 中关闭此选项将使您能够隐藏状态栏,至少对于当前的开发者预览版 (4)。

    作为参考,请查看 Apple 开发者门户上提供的 iOS 7 转换指南。

    【讨论】:

    • 在我看来,这个答案更好,因为在我的应用中,我只想在横向模式下隐藏状态栏,谢谢!
    • 感谢这对我有帮助,因为我想为我的整个应用隐藏它
    • 在我看来,这个答案应该是最好的答案->这里解释了developer.apple.com/library/prerelease/ios/documentation/…
    • 我已经这样做了,但看起来它只是隐藏了状态栏,但是,我的应用程序仍然被状态栏占用的空间量“推下”,我仍然可以看到电池指示灯!
    【解决方案4】:

    好吧,我尝试在我的所有应用程序和“app”-info.plist 中隐藏状态栏,并在字典“信息属性列表”中添加两行我添加“查看基于控制器的状态栏外观”设置 NO并在“状态栏最初是隐藏的”中设置为 YES,对我来说工作 n_n'

    【讨论】:

    • 这会强制您的应用程序进入一种兼容模式,该模式旨在让旧应用程序在 iOS 7 上按预期运行,而开发人员没有时间修复应用程序以适应新的工作方式。相反,您需要在视图控制器中实现 prefer* 方法。
    【解决方案5】:

    但是,如果你使用 UIImagePicker,状态栏会再次出现。

    在这种情况下,您应该隐藏状态栏,如下所示,

    - (void)imagePickerController:(UIImagePickerController *)aPicker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    
    // for iOS7
        if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
    
            [[UIApplication sharedApplication] setStatusBarHidden:YES];
        }
    

    【讨论】:

    • 我遇到了同样的问题。在我使用 UIImagePicker 之前,状态栏是隐藏的。我尝试了您的解决方案,但它对我不起作用。除了你帖子中的代码,我还需要添加什么吗?
    • @WootWoot 我还添加了 - (BOOL)prefersStatusBarHidden { return YES; } 查看控制器。请尝试一下。
    • 似乎对我不起作用..你真的应该打电话给setNeedsStatusBarAppearanceUpdate吗?
    • 我需要在单击按钮时隐藏状态栏。我试过下面的代码,但没有奏效。有人可以帮帮我吗。 [[UIApplication sharedApplication] setStatusBarHidden:YES];
    【解决方案6】:

    经过长时间的搜索,我终于找到了一个非常简单的解决方案,它也解决了UIImagePickerController问题。

    如其他答案中所述,将您的状态栏设置为隐藏在您的 AppDelegate didFinishLaunching 中,并将“查看基于控制器的状态栏外观”设置为 NO。

    然后,在您的 AppDelegate 中:

    - (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
    {
          [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
    }
    

    等等 - 即使 UIImagePickerController 位于最前面,您的状态栏也会保持隐藏状态。

    这比每次呈现 UIImagePickerController 时都“重新隐藏”要好,因为它在整个应用程序中保持隐藏状态。

    【讨论】:

    • 尽管至少在 iPad 上的 iOS7 中似乎仍有一些问题 - UIImagePickerController 在第二次显示时仍然会抛出一个状态栏...... Hurrrr ... :-( 目前我正在使用 appDelegate以及在每个 viewWillAppear 中再次隐藏它。所以即使它看起来很脏一段时间,它也会很快再次修复。
    • 这是在 iOS8 上对我有用的唯一方法......不知何故,我的视图控制器上不会调用 prefersStatusBarHidden。
    【解决方案7】:

    要隐藏特定 UIViewController 上的状态栏,只需添加以下内容:

    -(BOOL)prefersStatusBarHidden
    {
        return YES;
    }
    

    希望这会有所帮助!

    【讨论】:

    • !!这是在 iOS 9.2 中对我有用的解决方案,修改 plist 没有效果。
    【解决方案8】:

    您可以从项目摘要中隐藏。启动过程中有一个复选框隐藏。

    查看快照

    【讨论】:

      【解决方案9】:

      我为我找到了这个解决方案。它就像一个魅力。 将此代码写在您想要使用 UIImagePickerController 的视图控制器上。

      - (void)viewWillDisappear:(BOOL)animated
      {
      [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
      }
      - (void)viewWillAppear:(BOOL)animated
      {
      [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
           }
      

      【讨论】:

        【解决方案10】:

        除了上面单独的答案之外,请确保实现 imagePickerControllerDidCancel 方法并在那里添加相同的代码。

        【讨论】:

          【解决方案11】:

          我也遇到了 UIImagePicker 的问题。与 Alones 的回答类似,我的解决方案如下。我添加了这一行或代码:

          [[UIApplication sharedApplication] setStatusBarHidden:YES];
          

          到这个函数:

          - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
          

          我没有在 iOS 6 或更早版本上测试过这个,但它在 iOS 7 中运行良好。

          【讨论】:

          • 'setStatusBarHidden:' 已弃用:在 iOS 9.0 中首次弃用 - 使用 -[UIViewController prefersStatusBarHidden]
          【解决方案12】:

          迅捷解决方案

          只需将其添加到您的视图控制器:

          override func prefersStatusBarHidden() -> Bool {
              return true
          }
          

          【讨论】:

            【解决方案13】:

            我使用的是 Xcode 6,这个解决方案适用于我的 iOS 7 和 8:

            首先,在plist文件中将“基于控制器的状态栏外观”设置为NO。

            其次,在 AppDelegate 中添加:

            - (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
            {
                  [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
            }
            

            【讨论】:

              【解决方案14】:

              我的问题是我使用了视图控制器包含。只有最顶层的视图控制器(例如嵌入到导航控制器中)才能隐藏或显示状态栏。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多