在 Interface Builder
中使用 Storyboard
时,Xcode
是否有办法完全禁用状态栏,这样当我创建一个新的 View Controller
我不必一直将“状态栏”从推断变为无。
最佳答案
这是一个完全兼容 iOS 7 的解决方案(但不兼容 iOS 6,因为太多的东西已经改变了)
来自 Apple 文档“:信息属性列表关键引用”:
UIViewControllerBasedStatusBarAppearance( bool 值 - iOS)指定状态栏外观是否基于当前位于状态栏下方的 View Controller 的首选样式。当此键不存在或其值设置为 YES 时, View Controller 确定状态栏样式。当键设置为 NO 时, View Controller (或应用程序)必须分别使用 UIApplication 对象显式设置状态栏样式。 此 key 在 iOS 7.0 及更高版本中受支持。
因此默认情况下此键不存在(= 与添加键相同的行为,但将其设置为 YES):在这种情况下,每个 View Controller 通过覆盖某些方法来确定状态栏行为 - 见下文。
1) 全局显示/隐藏您应用的所有 viewController 的状态栏
所以首先要完整回答你的问题,为你所有的应用程序 viewControllers 做一个单一的全局显示/隐藏设置
第 1 步:在您的 frameWork-Info.plst 文件中,添加关键字“View controller-based status bar appearance”并将其设置为“NO”。将此键设置为“NO”将使 iOS 7 不调用方法“prefersStatusBarHidden”和“preferredStatusBarUpdateAnimation”,请参阅下文。
第 2 步:在项目设置 -> 常规 -> 部署信息中,在应用程序启动期间选择“显示/隐藏”
就是这样:现在您可以全局显示或隐藏状态栏,与 iOS 7 兼容
2) 让您的所有 viewController 单独控制状态栏(= iOS 7 默认值)
第 1 步:不添加 key ,或添加它,但将其设置为 YES,以获得 iOS 7 默认行为
第 2 步:在每个 viewController 中,您现在可以通过重写来确定是否显示/隐藏状态栏:
- (BOOL)prefersStatusBarHidden
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
因此您需要覆盖这 2 个方法来控制状态栏行为,并为您的应用程序返回适当的值(请参阅文档引用以了解所有可能的值,它有明确的解释)。
要控制应用程序启动期间的行为(显示的第一个 Controller ),请在项目设置下设置显示/隐藏 -> 常规 -> 部署信息
请注意,iOS 7 仅支持单一外观样式 (UIStatusBarStyleLightContent),所有其他样式均已弃用!
因此,您可以轻松地使用按钮打开/关闭栏 - 尽可能灵活!
例如,向您的 viewController 添加一个按钮和一个 bool @property 'isStatusBarHidden' 使用以下代码通过动画打开/关闭栏。
- (BOOL)prefersStatusBarHidden
{
return self.isStatusBarHidden;
}
- (IBAction)buttonToggleStatusBar:(UIButton *)sender
{
[UIView animateWithDuration:1.0 animations:^{
self.isStatusBarHidden = !self.isStatusBarHidden;
[self setNeedsStatusBarAppearanceUpdate];
}];
}
你可以为喜欢的动画做同样的事情
高级注意事项:如果您想为@property 'isStatusBarHidden' 设置默认值,您需要在'initWithCoder'(使用 Storyboard 时调用)而不是 viewDidLoad 中这样做。原因是 'prefersStatusBarHidden' 和 'preferredStatusBarUpdateAnimation' 在 'viewDidLoad' 之前被调用
关于iOS Storyboard - 一次禁用 Storyboard上的状态栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8975869/