在iOS 8应用中隐藏状态栏


74

我试过了

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 

这什么也没做。

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

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


4
您可以根据需要将条目添加到Info.plist。另外,我建议在SO和Google中进行搜索。这已经被问了很多。您将需要知道如何尽快找到更复杂问题的答案,最好现在就开始。
djromero 2014年

2
有效的批评,谢谢。
侵略者

2
只是一个建议@djromero-如果我们停止用户发布新版本的旧问题,答案就会过时-我们不应该鼓励这些吗?这也意味着回答这些问题的新来者将获得信誉,并且整个系统仍然有效。
2015年

@amergin重复的问题在任何意义上都不新鲜。每天都有很多新人要提问。我不记得确切是1年后,但是那一刻显然已经在SO中回答了这个问题。实际上,OP感谢我,所以我不知道您的意思是什么。
djromero

1
@amergin我不认为这是批评。我只想让您理解我的观点:一个问题不能新鲜,只能有所不同。重复的问题使以后很难搜索。关于您可以让我做的建议或批评家:您为什么不投票将其关闭?我不记得了
djromero

Answers:


173

除非您具有该plist条目,否则您需要在每个视图控制器上重写此方法。

物镜

-(BOOL)prefersStatusBarHidden{
    return YES;
}

迅捷2

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

迅捷3+

override var prefersStatusBarHidden: Bool {
    return true
}

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

物镜

vcToBeShownWithoutStatusbar.modalPresentationCapturesStatusBarAppearance = YES;

迅速

vcToBeShownWithoutStatusbar.modalPresentationCapturesStatusBarAppearance = true

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

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

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

物镜

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

迅捷2

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

迅捷3+

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

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

物镜

- (UIViewController *)childViewControllerForStatusBarHidden {
    return nil;
}

迅捷2

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

迅捷3+

override var childViewControllerForStatusBarHidden: UIViewController? {
    return nil
}

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


有没有办法解决这个问题,也许代码可以放在appdelegate中吗?
CaffeineShots

是的,创建您自己的UIViewController然后从中继承。
VaporwareWolf '16

setNeedsStatusBarAppearanceUpdate如果您需要在任意时间强制更新当前的ViewController,请别忘了致电
Albert Renshaw

121
  1. 转到Info.plist文件
  2. 将鼠标悬停在这些行之一上,将显示一个(+)和(-)按钮。
  3. 单击加号按钮添加新密钥
  4. 启动与资本V和自动的第一选择将是查看基于控制器的状态栏的外观。将其添加为密钥。
  5. 将值设置为“否”
  6. 转到您的适用于Objective-C的AppDelegate.m(用于快速语言: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
}

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


2
谢谢,这是我第一次发现有人能很好地解释这一点,而且这实际上是有道理的
卡尔·汉弗莱斯

7
如果您已经向info.plist添加了一个更多的键,则仅前5个步骤就足够了,添加此键=“状态栏最初
Mehul Thakkar

谢谢!!!,这只是一个小建议-您无需在appDelegate文件中进行编码,而是在XCode目标设置中选择“隐藏状态栏”选项,plist更改仍然适用。快乐编码!
Ashwin G

27

您可以隐藏状态栏而无需编写任何代码,只需在info.plist中输入两个条目,第一个是

将“基于视图控制器的状态栏外观”设置为“否”

第二个是

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


基于视图控制器的状态栏外观可以完成工作!
Makalele,2015年

11

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


感谢您的提示,我使用了上面的答案,但是很高兴知道它是如何工作的!非常感谢
Aggressor

这个答案需要为iOS 9
贝托


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

无需写一行代码...干杯


-4

如果您使用UIDocumentInteractionController来显示数据,那么您永远不会隐藏状态栏,因此我可以选择其他方式

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

此行将状态栏内容的颜色更改为白色

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.