【问题标题】:Hide the status bar in ios 9在 ios 9 中隐藏状态栏
【发布时间】:2016-01-03 02:43:39
【问题描述】:

ios 9 中如何隐藏状态栏?

现在已弃用:

 [UIApplication sharedApplication] setStatusBarHidden:YES];

【问题讨论】:

标签: ios objective-c swift swift3 statusbar


【解决方案1】:

Swift-3

 override var prefersStatusBarHidden: Bool {  
    return true  
}  

我从Here得到信息

  • func更改为var

  • 删除()

  • ->更改为:

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


2016 年以后:简单的事

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

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

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

按来源

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


旧答案! ...

  1. 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 appearance 设置NO

    View controller-based status bar appearance = NO
    

基于视图控制器的隐藏集

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

目标-C

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Swift 高达 2

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

(GOOD) 2016.5.17 在 iOS 9.0 中运行良好。

更新答案

  1. 转到 Info.plist 文件
  2. 将鼠标悬停在其中一行上,将显示 (+) 和 (-) 按钮。
  3. 点击加号按钮添加新密钥
  4. 输入以大写 V 开头,第一选择会自动成为查看基于控制器的状态栏外观。将其添加为 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;
}

对于 Swift:

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

    return true
}

【讨论】:

  • @AshishKakkad -- 我更新了我的答案,非常感谢我的朋友
  • @AshishKakkad -- 我没有遇到错误 iOS9,你能解释一下错误是什么,如果我面对它有用或我
  • 我认为您不需要或不需要向 info.plist 添加基于视图控制器的状态栏外观 = NO。这将触发错误消息。将一行代码添加到您的应用程序委托对我来说就足够了。
  • application.statusBarHidden 在 iOS 9 中已弃用
  • @JoeBlow - tanx buddy 那是我的旧答案我更新了答案验证一次
【解决方案2】:

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

View controller-based status bar appearance (NO)

Status bar is initially hidden (YES)

【讨论】:

  • 只是覆盖preferredStatusBarHidden 方法不起作用。添加这个终于为我做了。非常感谢!
  • 这只是 2016+ 的正确且唯一的答案。终于苹果解决了这个愚蠢的问题。加油!
  • 给你的小费。
【解决方案3】:

我知道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]");

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

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

- (BOOL)prefersStatusBarHidden {
   return YES;
}

【讨论】:

  • 但是如果想隐藏 VeiwController 中任何按钮的点击事件的状态栏呢?
  • @Mrug 您可能想将此问题作为一个新主题提出,而不是对答案发表评论。
【解决方案4】:

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

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

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

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }
    

就是这样。现在您可以随时拨打isStatusBarHidden = trueisStatusBarHidden = false

【讨论】:

    【解决方案5】:

    一个简单的方法是根据您的需要将应用程序的windowLevel 设置为正常或状态栏,因此开始

    Objective-C

    隐藏状态栏

     UIApplication.sharedApplication.keyWindow.windowLevel = UIWindowLevelStatusBar;
    

    显示状态栏

     UIApplication.sharedApplication.keyWindow.windowLevel = UIWindowLevelNormal;
    

    同时添加布尔值 NO 的 Key查看基于控制器的状态栏外观)。

    【讨论】:

      【解决方案6】:

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

      在 AppDelegate 的 didFinishLaunchingWithOptions 方法或您设置 navigationController 的任何位置:

      yourNavigationController.navigationBar.barStyle = .black
      

      然后使用alex-staravoitau 的绝妙答案,并在您要隐藏状态栏的任何位置添加此代码:

      override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
      }
      

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

      【讨论】:

      • 这是一个非常有用的答案。如果您需要在整个应用程序中进行精细控制,这就是您要走的路。不过,我不需要在 AppDelegate 中做任何事情。
      【解决方案7】:

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

      1. 打开 info.plist
      2. “基于视图控制器的状态栏外观”设置为 NO
      3. “状态栏最初是隐藏的”设置为是
      4. 完成

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-03
        • 2017-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-21
        • 1970-01-01
        相关资源
        最近更新 更多