【问题标题】:Hide Status Bar In iOS 8 app在 iOS 8 应用程序中隐藏状态栏
【发布时间】:2014-11-26 13:37:49
【问题描述】:

我试过了

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 

这没有任何作用。

我在Info.plist 文件中查看了“查看基于控制器的状态栏外观”,但它不存在。

如何在 Xcode 6 的应用中隐藏屏幕顶部的白色状态栏(带有时钟和电池电量)?谢谢!

【问题讨论】:

  • 您可以根据需要向 Info.plist 添加条目。另外,我建议在 SO 和 Google 中搜索。这已经被问了很多,也得到了很多回答。您需要知道如何尽快找到更复杂问题的答案,最好从现在开始。
  • 有效的批评,谢谢。
  • 只是一个建议@djromero - 如果我们停止用户发布旧问题的新版本,答案就会变老 - 我们不应该鼓励这些吗?这也意味着回答这些问题的新人将获得荣誉,并且整个系统仍然存在。
  • @amergin 重复的问题在任何意义上都不新鲜。新手每天都有很多问题。我不记得确切的 1 年后,但在那一刻很明显这个问题已经在 SO 中得到了回答。事实上,OP感谢我,所以我不知道你的意思是什么。
  • @amergin 我不认为这是批评。我只是想让你明白我的观点:一个问题不能新鲜,只能不同。重复的问题使以后更难搜索它们。你可以让我提出的建议或批评:你为什么不投票关闭它作为 dup?我不记得了。

标签: objective-c ios8 statusbar


【解决方案1】:

您需要在每个视图控制器上覆盖此方法,除非您有该 plist 条目。

Objective-C

-(BOOL)prefersStatusBarHidden{
    return YES;
}

斯威夫特 2

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

Swift 3+

override var prefersStatusBarHidden: Bool {
    return true
}

并且不要忘记设置(如果您通过调用 presentViewController:animated:completion: 方法呈现视图控制器):

Objective-C

vcToBeShownWithoutStatusbar.modalPresentationCapturesStatusBarAppearance = YES;

斯威夫特

vcToBeShownWithoutStatusbar.modalPresentationCapturesStatusBarAppearance = true

文档:https://developer.apple.com/reference/uikit/uiviewcontroller/1621453-modalpresentationcapturesstatusb

如果您从某个容器视图控制器更改状态栏(例如,UINavigationController 或带有子视图控制器的UIViewController)并且您想更改负责状态栏的视图控制器,您应该使用childViewControllerForStatusBarHidden: 属性。例如:

设置第一个视图控制器实例始终负责状态栏管理

Objective-C

- (UIViewController *)childViewControllerForStatusBarHidden {
    return childViewControllers.first; // or viewControllers.first
}

斯威夫特 2

override var childViewControllerForStatusBarHidden() -> UIViewController? {
    return childViewControllers.first // or viewControllers.first
}

Swift 3+

override var childViewControllerForStatusBarHidden: UIViewController? {
    return childViewControllers.first // or viewControllers.first
}

设置容器视图控制器负责状态栏管理

Objective-C

- (UIViewController *)childViewControllerForStatusBarHidden {
    return nil;
}

斯威夫特 2

override func childViewControllerForStatusBarHidden() -> UIViewController? {
    return nil
}

Swift 3+

override var childViewControllerForStatusBarHidden: UIViewController? {
    return nil
}

文档: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621451-childviewcontrollerforstatusbarh

【讨论】:

  • 有没有办法在全球范围内实现这一点,也许代码在 appdelegate 中?
  • 是的,创建你自己的 UIViewController 然后继承它。
  • 如果您需要强制它在任意时间更新当前视图控制器,请不要忘记调用setNeedsStatusBarAppearanceUpdate
【解决方案2】:
  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: [UIApplicationLaunchOptionsKey:Any]?) -> Bool {
    application.statusBarHidden = true

    return true
}

完成!运行您的应用程序,不再有状态栏!

【讨论】:

  • 谢谢,这是我第一次发现有人解释得很好,而且确实有道理
  • 如果您已向 info.plist 添加了一个键,则仅前 5 个步骤就足够了,添加此键 = "状态栏最初隐藏",值 =“是”
  • 谢谢!!!,只是一个小建议——你不需要在 appDelegate 文件中编码,而是在你的 XCode 目标设置中选择隐藏状态栏选项,plist 更改仍然适用。快乐编码!!!
【解决方案3】:

你可以隐藏状态栏而不用写一行代码,它只需要在 info.plist 中输入两个条目,第一个是

“查看基于控制器的状态栏外观”设置为 NO

第二个是

“状态栏最初是隐藏的”设置为YES

【讨论】:

  • 查看基于控制器的状态栏外观完成了这项工作!
【解决方案4】:

如果该行不存在,您可以将该行添加到您的 Info.plist 文件中。只需转到 Xcode 中的项目,转到“信息”部分,然后将鼠标悬停在现有行之一上。应该会出现一个“+”按钮,允许您添加一行并输入“查看基于控制器的状态栏外观”。

【讨论】:

  • 感谢您的提示,我使用了上面的答案,但很高兴知道它是如何工作的!非常感谢
  • 这个答案需要 iOS 9。
【解决方案5】:

对于带有 Swift 3 的 iOS 10,您应该使用:

override var prefersStatusBarHidden: Bool {
    get {
        return true
    }
}

【讨论】:

  • 这确实适用于 iOS 10。我更喜欢简短版本“override var prefersStatusBarHidden: Bool { return true }”
【解决方案6】:
  1. 打开 info.plist
  2. “基于视图控制器的状态栏外观”设置为 NO
  3. “状态栏最初是隐藏的”设置为是
  4. 完成

不用写一行代码...干杯

【讨论】:

    【解决方案7】:

    如果你使用 UIDocumentInteractionController 来显示数据,那么你永远不会隐藏状态栏,所以我有这个替代

     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    

    这一行将状态栏内容的颜色变为白色

    【讨论】:

      猜你喜欢
      • 2015-04-21
      • 2014-11-14
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 2011-02-23
      • 2017-03-20
      • 2013-10-01
      • 1970-01-01
      相关资源
      最近更新 更多