在iOS 7下,如何隐藏和显示状态栏(每当我想要的时候)

说一个用户在一个视图控制器,并希望进入一个“全屏”types的模式隐藏状态栏,在iOS 6下,这是一个简单的方法调用来隐藏/显示状态栏,但不pipe它看起来如何坚持在iOS 7下。

我见过这样的解决scheme:

- (BOOL)prefersStatusBarHidden { return YES; } 

但是这不允许在运行时切换。 (它不接受任何论点。)

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

我有智慧。 我如何隐藏它?

那么这里有一个这样做的方法:

在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

只要视图控制器的状态栏属性的返回值已经改变,就应该调用它。 如果从animation块内调用,则更改将与animation块的其余部分一起animation。

prefersStatusBarHidden:

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

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

要指定一个子视图控制器应该控制首选状态栏hidden / unhidden状态,实现childViewControllerForStatusBarHidden方法。


如果您计划在您的应用程序与iOS 6一起工作,也可能想看看这个职位

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

build议

对于iOS7支持,我build议你将基于视图控制器的状态栏外观重新设置为YES。 这将允许您在代码中控制状态栏。 iOS转换指南( 链接 )提供了用于pipe理状态栏外观的其他选项(这里不只是一个修复程序,而是一些可以确保获得所需内容的设置)。 另外请注意,即使您在代码中设置了外观,您仍然希望更新故事板或笔尖文件以匹配您的默认外观(否则,您可能会看到状态栏暂时闪烁,具体取决于设置代码以更新状态栏的位置) 。 我会build议您在视图出现之前设置代码。

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

 - (BOOL)prefersStatusBarHidden { return YES; } 

显示状态栏

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

可以有一些其他状态栏相关的问题:

  • 防止状态栏覆盖您的意见
  • 视图错误地绘制在状态栏下方

替代方法

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

选项#2

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

UIApplication状态

样品

你可以find上面提到的状态栏替代选项的代码示例:

  • AVPlayerDemo
  • GLPaint
  • StitchedStreamPlayer

如果屏幕上的视图控制器是根视图控制器,那么你应该能够实现这个function

 - (BOOL)prefersStatusBarHidden { return _showStatusBar; } 

_showStatusBarBOOL ,那么每当你改变该属性调用[self setNeedsStatusBarAppearanceUpdate]

如果视图控制器被保存在其他东西里面,比如一个UINavigationController那么你需要先在父控制器上实现- (UIViewController *)childViewControllerForStatusBarHidden ,然后返回当前呈现的视图控制器实例。

这是所有与View controller-based status bar appearance设置为YES

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

知名度—检查该框