状态栏不会消失

时间:2013-07-20 15:22:09

标签: hidden statusbar ios7 xcode5

我正在创建一个应用程序,我想隐藏状态栏。当我测试应用程序时,状态栏会在显示启动画面时隐藏,但一旦应用程序完全加载,状态栏就会重新出现。

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

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

在info.plist文件中,并使用.xib文件中的属性检查器。什么都没有效果。

有什么想法吗?

14 个答案:

答案 0 :(得分:220)

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

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

答案 1 :(得分:124)

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

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

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

答案 2 :(得分:73)

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

Add this and set to NO

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

答案 3 :(得分:36)

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

plist info

答案 4 :(得分:17)

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

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

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

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

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }

答案 5 :(得分:8)

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

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

然后,在你的AppDelegate中:

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

et voila - 即使UIImagePickerController最重要,您的状态栏也会保持隐藏状态。

这比每次呈现UIImagePickerController都要“重新隐藏”它,因为它在整个应用程序中都是隐藏的。

答案 6 :(得分:7)

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

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

希望这有帮助!

答案 7 :(得分:5)

您可以隐藏项目摘要。启动时隐藏了一个复选框。

查看快照

enter image description here

答案 8 :(得分:4)

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

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

答案 9 :(得分:3)

除了上述alones的答案之外,请确保实现imagePickerControllerDidCancel方法并在其中添加相同的代码。

答案 10 :(得分:3)

  

Swift Solution

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

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

答案 11 :(得分:2)

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

[[UIApplication sharedApplication] setStatusBarHidden:YES];

到这个功能:

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

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

答案 12 :(得分:0)

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

首先,在plist文件中将“View controller-based status bar appearance”设置为NO。

其次,在AppDelegate中,添加:

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

答案 13 :(得分:0)

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