在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仍然可行。
如果按照上面的plist设置,此选项将允许您继续使用UIApplication类属性。
样品
你可以find上面提到的状态栏替代选项的代码示例:
- AVPlayerDemo
- GLPaint
- StitchedStreamPlayer
如果屏幕上的视图控制器是根视图控制器,那么你应该能够实现这个function
- (BOOL)prefersStatusBarHidden { return _showStatusBar; }
与_showStatusBar
是BOOL
,那么每当你改变该属性调用[self setNeedsStatusBarAppearanceUpdate]
如果视图控制器被保存在其他东西里面,比如一个UINavigationController
那么你需要先在父控制器上实现- (UIViewController *)childViewControllerForStatusBarHidden
,然后返回当前呈现的视图控制器实例。
这是所有与View controller-based status bar appearance
设置为YES
我认为这将在您的应用程序的摘要页面下工作,否则回复我
知名度—检查该框