在使用Interface Builder
的Storyboard
时,有没有一种方法可以完全禁用状态栏,这样当我创建一个新的View Controller
时,我就不需要不断地将“状态栏”从默认更改为无。
在使用Interface Builder
的Storyboard
时,有没有一种方法可以完全禁用状态栏,这样当我创建一个新的View Controller
时,我就不需要不断地将“状态栏”从默认更改为无。
这是一个完全符合iOS 7标准的解决方案(虽然不兼容iOS 6,因为太多东西已经改变了)。
从苹果文档“信息属性列表键参考”中得知:
UIViewControllerBasedStatusBarAppearance(布尔值 - iOS)指定状态栏外观是否基于当前处于状态栏下方的视图控制器所偏好的样式。当此键不存在或其值设置为YES时,视图控制器确定状态栏样式。当将键设置为NO时,必须使用UIApplication对象显式地设置每个视图控制器(或应用程序)的状态栏样式。 此键支持iOS 7.0及更高版本。
因此,默认情况下不存在此键(等同于添加该键,但将其设置为YES):在这种情况下,每个视图控制器通过覆盖一些方法来确定状态栏行为 - 见下文。
1)全局显示/隐藏应用程序所有视图控制器的状态栏
因此,首先回答你的问题,要为应用程序的所有视图控制器设置单个全局显示/隐藏设置。
步骤1:在您的frameWork-Info.plst文件中,添加键“View controller-based status bar appearance”,并将其设置为“NO”。将此键设置为“NO”将使iOS 7不调用方法“prefersStatusBarHidden”和“preferredStatusBarUpdateAnimation”,请见下文。
步骤2:在项目设置->常规->部署信息中,选择“显示/隐藏”应用程序启动期间
就这样:现在您可以全局显示或隐藏符合iOS 7的状态栏
2)让您的所有视图控制器对状态栏进行个别控制(= iOS 7默认)
步骤1:不添加该键,或将其设置为YES,以获取iOS 7默认行为
步骤2:在每个视图控制器中,您现在可以通过覆盖以下内容来确定是否显示/隐藏状态栏:
因此,您需要重写这两个方法来控制状态栏行为,并为应用程序返回适当的值(请参阅文档引用以获取所有可能的值,它很清楚地解释了)。
要在应用程序启动期间控制行为(显示的第一个控制器),请在项目设置->常规->部署信息下设置show/hide
请注意,iOS 7仅支持单个外观样式(UIStatusBarStyleLightContent),其他所有样式都已弃用!
因此,您可以使用按钮轻松地切换栏的开/关状态 - 尽可能灵活!
例如,在viewController中添加一个按钮和布尔值@property 'isStatusBarHidden'使用以下代码来带有动画地切换栏的开/关状态。
- (BOOL)prefersStatusBarHidden
{
return self.isStatusBarHidden;
}
- (IBAction)buttonToggleStatusBar:(UIButton *)sender
{
[UIView animateWithDuration:1.0 animations:^{
self.isStatusBarHidden = !self.isStatusBarHidden;
[self setNeedsStatusBarAppearanceUpdate];
}];
}
你可以对 preferred animation 进行相同的操作。
高级注意事项:如果您想为属性“isStatusBarHidden”设置默认值,则需要在“initWithCoder”中执行此操作(在使用 Storyboards 时调用),而不是 viewDidLoad。原因是 'prefersStatusBarHidden' 和 'preferredStatusBarUpdateAnimation' 在 'viewDidLoad' 之前被调用。
UIStatusBarHidden
设置为 YES
的效果?请参考文档:http://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW15。这将在应用程序启动时隐藏状态栏。UIViewControllerBasedStatusBarAppearance
为 NO
时,此方法才有效。 - Alexander Farber
UIStatusBarStyleDefault
用于浅色背景,UIStatusBarStyleLightContent
用于深色背景。 - William Denniss