26

假设用户在 View Controller 中并想要进入隐藏状态栏的“全屏”类型模式,在 iOS 6 下,它是一个简单的方法调用来隐藏/显示状态栏,但不管它看起来如何坚持在 iOS 7 下。

我见过这样的解决方案:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

但这不允许在运行时切换它。(它不接受任何参数。)

在我的 info.plist 中,我View controller-based status bar appearance设置为NO.

我无计可施。我该如何隐藏它?

4

5 回答 5

74

斯威夫特 4

显示:

(UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow)?.isHidden = false

隐藏:

(UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow)?.isHidden = true



目标-c

好吧,这是一种方法:

在 myViewController.h

@interface myViewController : UIViewController {
    BOOL shouldHideStatusBar;
}

然后在 myViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];
    shouldHideStatusBar = YES;
}

- (BOOL)prefersStatusBarHidden {
    return shouldHideStatusBar;
}

假设当我触摸屏幕时,它现在应该显示状态栏。您需要调用:setNeedsStatusBarAppearanceUpdate特别是为了让它工作,然后是一个开关(在这种情况下是布尔值)来显示/隐藏。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    shouldHideStatusBar = (shouldHideStatusBar)? NO: YES;
    [self setNeedsStatusBarAppearanceUpdate];
}

setNeedsStatusBarAppearanceUpdate

每当视图控制器的状态栏属性的返回值发生变化时,都应该调用它。如果从动画块中调用它,则更改将与动画块的其余部分一起动画。

首选状态栏隐藏:

返回值 布尔值 YES 指定应隐藏状态栏。默认值为 NO。

讨论 如果您更改此方法的返回值,请调用 setNeedsStatusBarAppearanceUpdate 方法。

要指定子视图控制器应控制首选状态栏隐藏/未隐藏状态,请实现 childViewControllerForStatusBarHidden 方法。


如果您计划在您的应用程序上使用 iOS 6 以及可能想要查看这篇文章

于 2013-11-08T20:08:54.027 回答
3

我在 iOS 8 中遇到了其他一些问题,所以我做了更多的研究并发现:[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];. 然后,您可以启用/禁用动画。

于 2014-08-05T13:40:08.633 回答
2

推荐

对于 iOS7 支持,我建议您将基于视图控制器的状态栏外观转回 YES。这将允许您控制代码中的状态栏。iOS 转换指南 (链接) 提供了用于管理状态栏外观的其他选项(这里不仅有一个修复,还有许多设置可以确保你得到你想要的)。另请注意,即使您在代码中设置外观,您也需要更新情节提要或 nib 文件以匹配您的默认外观(否则您可能会看到状态栏暂时闪烁,具体取决于您设置代码以更新状态栏的位置) . 我建议您在视图出现之前设置代码。

将您的 plist 属性设置为 YES 后:确保此方法存在于您希望状态栏消失的 UIViewController 中:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

显示状态栏

如果您希望状态栏出现在每个视图控制器中,请返回 No。

可能还有许多其他与状态栏相关的问题:

替代方法

根据 Apple 的文档,您可以利用下面参考(链接)中提到的 UIApplication 方法来使用另一种管理状态栏的方法。使用这种方法时,setStatusBarHidden 仍然可行。

选项 #2

如果您遵循上面的 plist 设置,此选项将允许您继续使用 UIApplication 类属性。

UI应用状态

样品

您可以在以下位置找到上述状态栏替代选项的代码示例:

于 2013-11-08T20:17:30.080 回答
0

如果屏幕上的视图控制器是根视图控制器,那么您应该能够实现该功能

- (BOOL)prefersStatusBarHidden {
    return _showStatusBar;
}

_showStatusBara BOOL,那么每当您更改该属性调用时[self setNeedsStatusBarAppearanceUpdate]

如果视图控制器被保存在其他东西中,即 aUINavigationController那么您需要- (UIViewController *)childViewControllerForStatusBarHidden首先在父控制器上实现该方法并返回当前呈现的视图控制器实例。

这一切都View controller-based status bar appearance设置为YES

于 2013-11-13T03:55:22.850 回答
-1

我认为这将在您的应用程序的摘要页面下工作,否则回复我 在此处输入图像描述

可见性---选中该框

于 2013-11-09T17:07:02.297 回答