ChatGPT解决这个技术问题 Extra ChatGPT

在 iOS 8 应用程序中隐藏状态栏

我努力了

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 

这无济于事。

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

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

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

G
Grubas

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

Objective-C

-(BOOL)prefersStatusBarHidden{
    return YES;
}

斯威夫特 2

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

斯威夫特 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

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

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

Objective-C

- (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
}

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

Objective-C

- (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 中的代码?
是的,创建你自己的 UIViewController 然后继承它。
如果您需要强制它在任意时间更新当前视图控制器,请不要忘记调用 setNeedsStatusBarAppearanceUpdate
S
Slipp D. Thompson

转到 Info.plist 文件 将鼠标悬停在其中一行上,将显示 (+) 和 (-) 按钮。单击加号按钮添加新键 键入以大写 V 开头,自动第一个选择将是基于视图控制器的状态栏外观。将其添加为 KEY。将 VALUE 设置为“NO”转到您的 AppDelegate.m for Objective-C(对于 swift 语言:AppDelegate.swift)在方法内添加代码

对于 Objective-C:

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

    return YES;
}

对于斯威夫特:

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

    return true
}

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


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

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

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

第二个是

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


基于视图控制器的状态栏外观完成了这项工作!
N
Nerrolken

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


感谢您的提示,我使用了上面的答案,但很高兴知道它是如何工作的!非常感激
这个答案需要 iOS 9。
R
Ramon Vasconcelos

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

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

事实上,这适用于 iOS 10。我更喜欢简短版本“覆盖 var prefersStatusBarHidden: Bool { return true }”
e
emraz

打开 info.plist “查看基于控制器的状态栏外观”设置为 NO “状态栏最初隐藏”设置为 YES 完成

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


T
Tester

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

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

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