227

在我的 iOS 视频应用中,状态栏隐藏在某些视图控制器中。我已经使用以下代码完成了这项工作。

[[UIApplication sharedApplication] setStatusBarHidden:YES];
  • 它适用于 iOS 5 和 iOS 6 ,但不适用于 iOS 7。

  • 我特别尝试了这个视图控制器,

例如:

-(BOOL)prefersStatusBarHidden { return YES; }

它运作良好,但我无法在父视图控制器中再次显示状态栏。

4

21 回答 21

280

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

在此处输入图像描述

于 2013-09-24T11:49:59.653 回答
202

将以下内容添加到您的 Info.plist:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

图片

于 2013-12-12T06:42:31.873 回答
115

在 viewdidload 中添加以下行

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

并添加新方法

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }

还更改 info.plist 文件查看基于控制器的状态栏外观" = NO

它对我有用

于 2013-11-22T13:26:29.640 回答
34

在 Plist 中添加以下属性。

Status bar is initially hidden = YES

View controller-based status bar appearance = NO

现在状态栏将隐藏。

于 2013-10-17T07:08:07.087 回答
29

Try this simple method:


Objective-C:

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

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

Swift:

override func viewWillAppear(animated: Bool) 
{
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) 
{
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}
于 2014-01-21T12:25:10.560 回答
14

我做了以下,它似乎工作(即使在 iOS 8):

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}
于 2014-11-08T07:36:58.513 回答
14
  • UIApplication.setStatusBarX 自 iOS9 起已弃用
  • 在 info.plist 中不推荐使用 UIViewControllerBasedStatusBarAppearance=NO
  • 所以我们应该在我们所有的视图控制器中使用preferredStatusBarX

但是当涉及到 UINavigationController 时,它会变得更有趣:

  • 如果navigationBarHidden = true,则调用子UIViewController 的preferredStatusBarX,因为子在状态栏下显示内容。
  • 如果navigationBarHidden = false,则调用UINavigationController 的preferredStatusBarX,毕竟它是在状态栏下显示内容。
  • UINavigationController 的默认preferredStatusBarStyle 使用来自UINav.navigationBar.barStyle 的值。.Default = 黑色状态栏内容,.Black = 白色状态栏内容。
  • 因此,如果您将 barTintColor 设置为某种自定义颜色(您可能是),您还需要将 barStyle 设置为 .Black 以获取白色状态栏内容。在设置 barTintColor 之前,我会将 barStyle 设置为黑色,以防 barStyle 覆盖 barTintColor。
  • 另一种选择是您可以继承 UINavigationController 而不是使用 bar 样式。
  • 但是,如果您继承 UINavigationController,如果 navigationBarHidden = true,您将无法控制状态栏。在这种情况下,UIKit 在不询问 UINavigationController 的情况下以某种方式直接访问子 UIViewController。我原以为 UINavigationController 有责任问孩子>耸耸肩<。
  • 如果 modalPresentationStyle = .FullScreen,模态显示的 UIViewController 只会在状态栏中有发言权。
  • 如果你有一个自定义展示风格的模态视图控制器并且你真的希望它来控制状态栏,你可以设置 modalPresentationCapturesStatusBarAppearance = true。
于 2015-12-21T23:48:32.700 回答
9

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

  1. 在应用程序中:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 写

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

     View-Controller Based Status Bar Appearance = NO
    
于 2013-11-11T12:02:32.570 回答
8

为了更好地理解,添加一些带有评论的照片:

任何更改之前的应用程序

在此处输入图像描述

在您Project Navigator命名的文件夹中找到Supporting Files并单击 *.plist 文件

在此处输入图像描述

之后,您将获得应用程序的不同设置。您需要添加 2 个键UIStatusBarHiddenUIViewControllerBasedStatusBarAppearance. 您只需单击 + 按钮即可执行此操作

在此处输入图像描述

按 + 后,您可以选择其中一个键 - 开始输入。

正确版本:

在此处输入图像描述

最后应用此更改后的应用程序:

在此处输入图像描述

此外,您可以在此处找到替代解决方案

于 2014-09-02T17:56:50.140 回答
8

斯威夫特 5

使用以下步骤隐藏 iOS 状态栏:

  1. 在 Info.plist 上打开。
  2. 添加新的键基于视图控制器的状态栏外观和值设置为NO
  3. 添加新键状态栏最初是隐藏的,值设置为YES
  4. 重新编译项目。
  5. 状态栏现在应该隐藏在 iOS 手机上。

最终设置截图:

最终设置

这适用于Xcode 10.2

于 2019-07-15T08:32:15.443 回答
8

在 iOS10 中,我需要做的就是覆盖我(Swift)prefersStatusBarHidden中的 var :RootViewController

override var prefersStatusBarHidden: Bool {
    return true
}
于 2017-02-14T14:14:18.077 回答
7

试试看;

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
于 2013-11-03T12:45:37.763 回答
5

在 iOS7 中隐藏状态栏:

打开您的 plist 文件,然后添加一个名为“查看基于控制器的状态栏外观”的行并将其值设置为NO.

于 2013-10-11T11:06:43.793 回答
5

这是 Swift 版本(iOS9 之前):

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

这也适用(iOS7+):

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

您还需要致电:

setNeedsStatusBarAppearanceUpdate()

在说viewDidLoad()

请注意,如果您使用 SplitView 控制器或其他一些container视图控制器,您还需要让它在发送时返回您的类childViewControllerForStatusBarHidden。一种方法是为 say 设置一个公共的弱变量statusController,并在这个被覆盖的方法中返回它。

于 2015-10-14T11:58:52.623 回答
5

iOS 9 及以上版本:

由于statusBarHidden方法已从iOS9弃用, 您需要在 plist 中添加两个值,如下所示:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

或通过用户界面请参考下图:

在此处输入图像描述

statusBarHiddeniOS9弃用:_ _

@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden NS_ DEPRECATED _IOS(2_0, 9_0 , "Use -[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;

于 2016-11-30T10:44:36.430 回答
5

SWIFT 3+(iOS 9、10)的固定解决方案

1- 在 info.plist 设置下面的属性

在此处输入图像描述

2-将下面的代码粘贴到根控制器,到

 private var isStatusBarHidden = true {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

你可以打电话isStatusBarHidden = trueisStatusBarHidden = false你想要的hide/show状态栏

于 2017-05-09T14:18:09.237 回答
4

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

于 2014-09-22T13:02:53.490 回答
4

iOS 隐藏状态栏步骤
1. 打开AppDelegate.m文件,在 didFinishLaunchingWithOptions 方法中添加 application.statusBarHidden

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    application.statusBarHidden = YES;
    return YES;
    }
  1. 打开info.plist 并设置

View controller-based status bar appearanceNO

于 2016-03-11T14:54:05.507 回答
2

UIKit> UIApplication.h:

// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);

所以应该设置View controller-based status bar appearance为NO

于 2013-12-06T09:12:35.540 回答
2

要回答 Susitha 的问题:使用setNeedsStatusBarAppearanceUpdate。这将调用 prefersStatusBarHidden 以刷新您所需的状态栏状态。尝试这个:

    @property (nonatomic, getter=isHideStatusBar) BOOL hideStatusBar; // Give this a default value early

    - (BOOL)prefersStatusBarHidden {
        return self.isHideStatusBar;
    }

    - (void)someMethod {
    // triggered by an event or user action
    [self setHideStatusBar:YES];
    [self setNeedsStatusBarAppearanceUpdate];
    }

如果您想再次查看状态栏,请将您的属性 hideStatusBar(或您所称的任何名称)设置为 NO。通过再次调用来间接调用 preferStatusBarHidden

[self setNeedsStatusBarAppearanceUpdate]
于 2015-01-18T22:39:55.507 回答
1

Swift 3 的更新:

使用以下信息更新 Info.plist:

View controller-based status bar appearance: NO

然后,在 ViewController 或其他地方:

UIApplication.shared.isStatusBarHidden = true

于 2017-02-19T14:40:52.153 回答