状态栏不会消失


112

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

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

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

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

有任何想法吗?

Answers:


220

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

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

2
如何在全球范围内做到这一点?
jjxtra 2013年

16
另外,如Apple文档所述,您应[self setNeedsStatusBarAppearanceUpdate];在调用此方法后使用默认值以外的值(默认值为NO)来调用after。
manderson

3
@PsychoDad检查我的答案以获得更全面的解决方案。
伊丹

2
完美,谢谢。我只是不知道为什么iOS 7会这样做并且不尊重不包含任何状态栏设置的XIB!
justinhartman

1
我需要将其添加到添加到堆栈中的ViewController上,以隐藏该viewcontroller中的状态栏。移除此ViewController后,状态栏将返回。
MacD

126

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

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

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


2
花了我很多时间来解决这个问题。我认为这是每个人都会遇到的一个问题,而苹果公司对此并没有足够提及。很高兴为您提供帮助
Idan

7
工作正常,不要忘记将“状态栏最初处于隐藏状态”的.plist值设置为YES。
andreas-supersmart 2013年

1
哇,那是唯一与Kobold2d 2.1.0和iOS 7兼容的东西!
Binarian

5
苹果并不是真正向后兼容的拥护者。让我们一起跳他们的长笛,并更新我们的每个应用程序。对不起,发泄挫败感。由苹果引起。
Henrik Erlandsson 2013年

1
终于对我有用。因为-(BOOL)在模型视图中不喜欢状态禁止隐藏方法。
utkal patel

73

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

添加并设置为“否”

作为参考,请查看Apple开发人员门户网站上提供的iOS 7过渡指南。


3
我认为这个答案更好,因为在我的应用中,我只想在横向模式下隐藏状态栏,谢谢!
阮阮

谢谢,这对我有帮助,因为我想为我的整个应用程序隐藏它
kevinl 2013年

2
在我看来,这个答案应该是最好的答案- >在此解释developer.apple.com/library/prerelease/ios/documentation/...
marceloquinta

5
我已经做到了,但是看起来它只是隐藏了状态栏,但是,我的应用仍然被状态栏占用的空间“推”下了,我仍然可以看到电池指示器!
vedran 2013年

36

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

plist信息


2
当开发人员没有时间修复应用程序的新工作方式时,这会迫使您的应用程序进入兼容模式,旨在仅使旧应用程序在iOS 7上按预期运行。相反,您需要在视图控制器中实现preferred *方法。
lhunath 2014年

17

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

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

- (void)imagePickerController:(UIImagePickerController *)aPicker didFinishPickingMediaWithInfo:(NSDictionary *)info {

// for iOS7
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }

2
我有同样的问题。在使用UIImagePicker之前,状态栏一直处于隐藏状态。我尝试了您的解决方案,但对我不起作用。除了帖子中的代码,我是否需要添加其他内容?
Dev01 2013年

我还添加了@WootWoot-(BOOL)prefersStatusBarHidden {return YES; }查看控制器。请尝试一下。
2013年

似乎不适合我..你应该打电话setNeedsStatusBarAppearanceUpdate吗?
RyanM

我需要在单击按钮时隐藏状态栏。我试过下面的代码,但是没有用。有人可以帮帮我吗。[[UIApplication sharedApplication] setStatusBarHidden:YES];
janitheshan

8

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

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

然后,在您的AppDelegate中:

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

等-即使UIImagePickerController最重要,您的状态栏也将保持隐藏。

这比每次显示UIImagePickerController时都“隐藏”它更好,因为它在整个应用程序中始终保持隐藏状态。


2
尽管至少在iPad7上的iOS7中似乎还是有问题-UIImagePickerController仍然在第二次显示时抛出状态栏... Hurrrr ... :-(目前,我正在使用appDelegate并将其再次隐藏在每个viewWillAppear中因此,即使它看起来很脏很短时间也很快被修复了
ikuramedia 2013年

1
这是在iOS8上对我有用的唯一方法...某种程度上,prefersStatusBarHidden不会在我的视图控制器上调用。
mojuba

7

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

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

希望这可以帮助 !


!! 这是在iOS 9.2中对我有用的解决方案,修改plist无效。
mico

5

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

查看快照

在此处输入图片说明


4

我为我找到了这个解决方案。它像一种魅力。将此代码写在要使用UIImagePickerController的viewcontroller上。

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

3

除了上面单独回答的内容外,请确保实现imagePickerControllerDidCancel方法并在其中添加相同的代码。


2

我也有UIImagePicker的问题。与“单独回答”相似,我的解决方案如下。我添加了以下行或代码:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

此功能:

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

我尚未在iOS 6或更早版本上进行过测试,但在iOS 7中效果很好。



0

我正在使用Xcode 6,该解决方案适用于iOS 7和8:

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

其次,在AppDelegate中添加以下内容:

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

0

我的问题是我使用了视图控制器容器。只有嵌入在导航控制器中的最高视图控制器才可以隐藏或显示状态栏。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.