在iOS 7下,如何随时隐藏和显示状态栏(只要我想)

问题描述:

假设用户在View Controller中,并且想要进入隐藏状态栏的“全屏”类型模式, iOS 6的下,这是一个简单的方法调用隐藏/显示状态栏,但不管如何,似乎到iOS 7下坚持在iOS 7下,如何随时隐藏和显示状态栏(只要我想)

我见过的解决方案是这样的:

- (BOOL)prefersStatusBarHidden { 
    return YES; 
} 

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

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

我很好。我如何隐藏它?

+0

http://stackoverflow.com/a/9795209/2792531这是否工作? – nhgrif

+2

不,只适用于iOS 6及以下版本。 –

那么这里是这样做的一种方法:在

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

每当视图 控制器的状态栏属性的返回值已经改变了这种应该叫。如果在动画块中从 调用它,则更改将与动画块的其余部分一起动画化。

prefersStatusBarHidden:

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

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

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


如果您计划在您的应用程序与iOS 6的工作,以及可能想看看this post

+1

我是否需要在PLIST中更改基于视图控制器的状态栏线? –

+2

为什么在'performSelector'调用中将调用包装为'setNeedsStatusBarAppearanceUpdate',为什么调用'prefersStatusBarHidden'? – Tommy

+1

如果我添加'preferStatusBarHidden'方法并返回YES,它目前没有任何效果。 –

建议

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

您的plist属性设置为YES后:要状态条消失确保这种方法在UIViewController中存在:

- (BOOL)prefersStatusBarHidden 
{ 
    return YES; 
} 

显示状态栏

没有返回,如果你” d像状态栏一样出现在每个视图控制器中。

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

另类视角

根据苹果的文档,你可以使用另一种方法通过利用UIAppli来管理状态栏(link)中记录的阳离子方法。使用此方法时,setStatusBarHidden仍然可行。

Option #2

此选项可以让你继续,如果你按照上面的plist设置使用UIApplication类属性。

UIApplication Status

样品

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

我认为这将在总结页面工作,你的应用程序或者回复我 enter image description here

知名度---检查框

+0

这不允许我在运行中更改它,如原始帖子中所述。 –

+1

@Doug Smith **您可以在您的appdelegate中添加此代码** 'self.window.frame = CGRectMake(0,0,self.window.frame.size.width,self.window.frame.size.height );' –

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

- (BOOL)prefersStatusBarHidden { 
    return _showStatusBar; 
} 

_showStatusBar是一个BOOL,那么只要更改属性调用[self setNeedsStatusBarAppearanceUpdate]

如果视图控制器正在举行的其他东西,即内UINavigationController那么你需要首先实现父控制器上的方法- (UIViewController *)childViewControllerForStatusBarHidden并返回当前呈现视图控制器实例。

这是所有View controller-based status bar appearance设置为我是有一些在iOS 8的其他答案的麻烦,所以我做多一点研究,发现YES

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];。然后您可以启用/禁用动画。