269

我刚刚将我的 iPhone 5 iOS 7 升级到了四个 beta 版本。现在,当我在这台 iPhone 上从 Xcode 5 运行我的应用程序时,状态栏并没有隐藏,即使它应该隐藏。

不工作:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];

不工作:

[UIApplication sharedApplication].statusBarHidden = YES;

无法登录 Apple 开发者论坛

4

26 回答 26

560

在您的应用程序 plist 文件中添加一行,将其命名为“查看基于控制器的状态栏外观”并将其设置为 NO

请注意,如果您在应用程序中使用 UIImagePickerController,这根本不起作用。

来自http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/,mgiroux的解决方案

在 Xcode 中将 View Base Controller 添加到 Info 设置的示例

于 2013-08-31T16:01:16.877 回答
278

在视图控制器中添加方法。

- (BOOL)prefersStatusBarHidden {
    return YES;
}
于 2013-09-11T12:13:34.550 回答
85

在 Plist 中添加以下属性。

-> Status bar is initially hidden= 是

-> View controller-based status bar appearance= 否

添加两者 - 现在状态栏将消失。

于 2013-09-19T08:27:13.333 回答
54

要在单个视图上隐藏状态栏,您应该使用:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];

起初,这对我不起作用,然后在此方法的文档中看到: // 如果您的应用程序使用默认的基于 UIViewController 的状态栏系统,则设置 statusBarHidden 不起作用。

这必须在 plist 文件上完成,将密钥View controller-based status bar appearance集添加到NO. 然后它起作用了。

于 2013-08-30T01:00:45.367 回答
16

要在 iOS7 中隐藏状态栏,您需要 2 行代码

  1. 应用:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    [application setStatusBarHidden:YES];
    
  2. 在 info.plist 添加这个

    View-Controller Based Status Bar Appearance = NO
    
于 2013-11-11T12:01:17.890 回答
16

为了使用旧的 UIApplication 方法来隐藏/显示状态栏,你的应用程序必须为 iOS 7 设置一个 plist 值:

View-Controller Based Status Bar Appearance = NO

此值默认设置为 YES。如果将其更改为 NO,则可以使用旧方法。如果您将其设置为 YES,您仍然可以隐藏状态栏,但由您的应用程序中的每个视图控制器子类来覆盖:prefersStatusBarHidden返回 YES。

每当您的应用程序需要更改状态栏外观或可见性,并且基于视图控制器的状态栏外观设置为 YES 时,您的最外层视图控制器需要调用:

setNeedsStatusBarAppearanceUpdateAnimation

于 2013-09-17T17:22:14.563 回答
11

这个问题有很多组合建议,但问题是 iOS 6 和 7 使用不同的方法隐藏状态栏。我从未成功设置 plist 设置以在 iOS 7 上启用 iOS6 样式的行为,但如果您正在构建您的应用程序以支持 iOS 6+,您需要同时使用 3 种方法来确保特定的视图控制器隐藏状态酒吧:

// for ios 7 
- (BOOL)prefersStatusBarHidden{
    return YES;
}

// for ios 6
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // explicitly set the bar to show or it will remain hidden for other view controllers
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

无论您的 plist 设置如何,这都应该有效。

于 2014-03-10T18:26:52.870 回答
7

我必须在下面进行两项更改才能隐藏状态栏:

将此代码添加到要隐藏状态栏的视图控制器中:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

将此添加到您的 .plist 文件中(转到应用程序设置中的“信息”)

View controller-based status bar appearance --- NO

然后你可以调用这一行来隐藏状态栏:

[[UIApplication sharedApplication] setStatusBarHidden:YES];
于 2013-12-30T01:50:27.047 回答
6

试试这个简单的方法:

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

- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
于 2014-01-21T12:26:28.373 回答
6

只需在 info.plist 文件中添加这两行。它将同时修复 iOS7 和旧版本。

  • 状态栏最初是隐藏的 = YES
  • 查看基于控制器的状态栏外观 = NO

导航到项目并选择 Targets -> General 并查看“状态栏样式...在应用程序启动期间隐藏”复选框将被选中。这将起作用。

于 2014-01-11T05:25:52.640 回答
4

唯一对我有用的是在您的 plist 中添加以下内容

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
于 2013-10-15T19:45:12.353 回答
4

我发现在整个应用程序中隐藏状态栏的最简单方法是创建一个categoryonUIViewController并覆盖prefersStatusBarHidden. 这样您就不必在每个视图控制器中编写此方法。

UIViewController+HideStatusBar.h

#import <UIKit/UIKit.h>

@interface UIViewController (HideStatusBar)

@end

UIViewController+HideStatusBar.m

#import "UIViewController+HideStatusBar.h"

@implementation UIViewController (HideStatusBar)

//Pragma Marks suppress compiler warning in LLVM. 
//Technically, you shouldn't override methods by using a category, 
//but I feel that in this case it won't hurt so long as you truly 
//want every view controller to hide the status bar. 
//Other opinions on this are definitely welcome

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

#pragma clang diagnostic pop


@end
于 2014-01-10T02:00:59.783 回答
3
-(BOOL)prefersStatusBarHidden
{
    return YES;
}
于 2013-10-09T10:24:23.453 回答
3

在 iOS 7 中隐藏状态栏的步骤:

1.转到您的应用程序 info.plist 文件。

2.设置,查看基于控制器的状态栏外观:Boolean NO

希望我解决了状态栏问题.....

于 2014-01-30T11:48:31.687 回答
3
  1. 在plist中添加----

    查看基于控制器的状态栏外观 --- NO

  2. 在每个 viewController 中写

    - (void) viewDidLayoutSubviews
    {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = 20.0;
        viewBounds.origin.y = -topBarOffset;
        self.view.bounds = viewBounds;
    
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//for status bar style
    }
    

对于 iOS 7 中的状态栏问题,但应用程序的目标应为 5.1 及更高版本

于 2013-10-01T05:04:18.797 回答
3

该线程上的许多答案都有效,但我的理解是,如果您尝试做任何动态的事情,您最终需要调用:

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
于 2013-12-01T01:49:42.573 回答
3

对于 iOS 7 在单个视图中使用 viewWillappear 方法:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];

要显示状态栏,请使用:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
于 2014-07-14T05:39:19.993 回答
2

在 Info Plist 文件中为以下属性添加一行

属性名称:查看基于控制器的状态栏外观

值:否

于 2013-10-09T11:33:55.080 回答
1

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

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
于 2013-09-25T12:03:53.883 回答
1

我尝试了在我的项目中发布的所有这些选项,但它们不起作用。我认为这可能与我已将我Xcode的应用程序更新到 iOS 7 以及某些设置在某个地方搞砸的事实有关。我决定为它构建一个全新的项目,并在简单的设置之后:“ Status bar is initially hidden = YES”和“ View controller-based status bar appearance = NO”,正如许多其他人所说的那样,它可以正常工作(即没有状态栏)。

因此,如果您正在处理一个已从旧版本更新到 iOS 7 并尝试了所有其他选项的项目,我的建议是构建一个新项目。

于 2014-04-01T18:59:34.820 回答
1

对于 2019 年...

要制作一个没有状态栏的应用程序,

单击 info.plist,右键单击“添加行”。

使用以下设置添加这两个:

在此处输入图像描述

这里的所有都是它的。

于 2019-07-28T18:19:52.117 回答
0

您可以检查此代码,pod UIViewController+ODStatusBar

于 2015-06-26T10:24:38.833 回答
0

隐藏特定视图控制器的状态栏

- (BOOL)prefersStatusBarHidden {
    return YES;
}

用于设置状态栏隐藏应用程序:

  • 在 .plist 和 setView controller-based status bar appearance中设置: NOapplication: didFinishLaunchingWithOptions:[application setStatusBarHidden:YES];

    注意:setStatusBarHidden:已弃用

或者

  • 在项目设置 -> 常规选项卡 -> 部署信息

    复选框Hide Status bar

于 2017-03-21T11:49:09.540 回答
0

对于 Swift 2.0+ IOS 9

override func prefersStatusBarHidden() -> Bool {
return true
}
于 2016-02-08T09:19:58.983 回答
-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}
于 2013-12-26T21:13:54.977 回答
-7

我不确定为什么您“无法登录 Apple 开发者论坛”,但是(不违反 NDA)您也可以通过 Xcode 隐藏您的状态栏。这是您的应用程序目标的一般设置。在此处输入图像描述

于 2013-08-05T13:45:24.097 回答