33

你如何在 ios 9 中隐藏状态栏?

现在已弃用:

 [UIApplication sharedApplication] setStatusBarHidden:YES];
4

7 回答 7

83

斯威夫特-3

 override var prefersStatusBarHidden: Bool {  
    return true  
}  

我从这里得到信息

  • 更改funcvar

  • 删除()

  • 更改->:

这是因为计算变量有一个 getter 函数,所以你之前实现的函数只是变成了 getter 函数


2016 年以后:简单之类的

在您的 info.plist 上为 statusBar Hidden 添加以下两个属性

查看基于控制器的状态栏外观(布尔值:否)

状态栏最初是隐藏的(布尔值:是)

按来源

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

或者

在此处输入图像描述


老答案!...

  1. 加入application.statusBarHidden_didFinishLaunchingWithOptions

    - (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 appearance集合NO

    View controller-based status bar appearance = NO
    

基于视图控制器的隐藏集

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

目标-C

- (BOOL)prefersStatusBarHidden {
    return YES;
}

斯威夫特高达 2

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

(好)iOS 9.0 中的 2016.5.17 运行良好。

更新的答案

  1. 转到 Info.plist 文件
  2. 将鼠标悬停在其中一条线上,将显示 (+) 和 (-) 按钮。
  3. 单击加号按钮添加新密钥
  4. 输入以大写 V 开头,自动第一个选择将是View controller-based status bar appearance。将其添加为 KEY。
  5. 将值设置为“否”
  6. 转到您的 AppDelegate.m for Objective-C(对于 swift 语言:AppDelegate.swift
  7. 在方法内部添加代码

对于 Objective-C:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [application setStatusBarHidden:YES];

    return YES;
}

对于斯威夫特:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool {
    application.statusBarHidden = true

    return true
}
于 2015-10-06T08:57:50.303 回答
16

在 info.plist 添加以下两个属性。

View controller-based status bar appearance (NO)

Status bar is initially hidden (YES)
于 2015-10-06T09:07:28.040 回答
7

我知道文档setStatusBarHidden:没有提到什么用途。但标题UIApplication确实如此。

// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController prefersStatusBarHidden]");
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_DEPRECATED_IOS(3_2, 9_0, "Use -[UIViewController prefersStatusBarHidden]");

这里声明您应该使用prefersStatusBarHiddenonUIViewController并使用基于视图控制器的状态栏样式。

您现在需要做的就是配置视图控制器是否需要显示或隐藏状态栏。像这样:

- (BOOL)prefersStatusBarHidden {
   return YES;
}
于 2015-10-06T08:56:45.160 回答
6

以下是如何轻松返回对iOS 9+Swift 3+状态栏可见性的控制:

  1. View controller-based status bar appearance将具有YES值的键添加到Info.plist.
  2. 将此变量添加到视图控制器:

    private var isStatusBarHidden = false {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }
    
  3. 覆盖prefersStatusBarHidden属性:

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }
    

而已。isStatusBarHidden = true现在您可以随时拨打电话isStatusBarHidden = false

于 2016-10-11T07:22:00.340 回答
2

一种简单的方法是windowLevel根据您的需要将 Application 设置为 normal 或 statusBar ,因此开始

Objective-C

隐藏状态栏

 UIApplication.sharedApplication.keyWindow.windowLevel = UIWindowLevelStatusBar;

显示状态栏

 UIApplication.sharedApplication.keyWindow.windowLevel = UIWindowLevelNormal;

还添加布尔值 NO 的Key基于视图控制器的状态栏外观)。

在此处输入图像描述

于 2018-07-25T11:33:58.713 回答
1

如果由于某种原因您需要View controller-based status bar appearance等于YES(例如保持状态栏为白色)

在 AppDelegate 的didFinishLaunchingWithOptions方法或您设置导航控制器的任何位置:

yourNavigationController.navigationBar.barStyle = .black

然后使用alex-staravoitau的真棒答案,并在您要隐藏状态栏的任何地方添加此代码:

override var preferredStatusBarStyle: UIStatusBarStyle {
  return .lightContent
}

我不确定这是否是实现此结果的正确方法,但它对我有用,我希望它也对其他人有所帮助:)

于 2016-12-23T03:42:37.777 回答
0

在大多数 iOS 中它都可以工作。我已经用 iOS 10 进行了测试。

  1. 打开 info.plist
  2. “基于视图控制器的状态栏外观”设置为 NO
  3. “状态栏最初是隐藏的”设置为 YES
  4. 完毕
于 2017-05-03T08:31:14.730 回答