12

有没有办法在Xcode使用StoryboardinInterface Builder完全禁用状态栏时,这样当我创建一个新的时,View Controller我不必一直将“状态栏”从推断变为无。

4

2 回答 2

24

这是一个完全兼容 iOS 7 的解决方案(虽然不兼容 iOS 6,因为太多的东西已经改变了)

来自 Apple 文档“:信息属性列表键参考”:

UIViewControllerBasedStatusBarAppearance (Boolean - iOS) 指定状态栏外观是否基于当前位于状态栏下方的视图控制器首选的样式。当此键不存在或其值设置为 YES 时,视图控制器确定状态栏样式。当键设置为 NO 时,视图控制器(或应用程序)必须每个都使用 UIApplication 对象显式设置状态栏样式。iOS 7.0 及更高版本支持此密钥。

因此,默认情况下,此键不存在(= 与添加键的行为相同,但将其设置为 YES):在这种情况下,每个视图控制器通过覆盖某些方法来确定状态栏行为 - 见下文。

1) Globaly 显示/隐藏应用程序的所有视图控制器的状态栏

所以首先是您问题的完整答案,为您的所有应用程序视图控制器进行单一的全局显示/隐藏设置

第 1 步:在您的 frameWork-Info.plst 文件中,添加键“查看基于控制器的状态栏外观”并将其设置为“否”。将此键设置为“NO”将使 iOS 7 不会调用方法“prefersStatusBarHidden”和“preferredStatusBarUpdateAnimation”,请参阅下文。

第 2 步:在项目设置 -> 常规 -> 部署信息中,在应用程序启动期间选择“显示/隐藏”

就是这样:现在您可以全局显示或隐藏状态栏,符合 iOS 7

2) 让所有的 viewControllers 单独控制状态栏(= iOS 7 默认)

第 1 步:不添加密钥,或者添加它,但将其设置为 YES,以获取 iOS 7 默认行为

第 2 步:在每个 viewController 中,您现在可以通过覆盖确定是否显示/隐藏状态栏:

  • (BOOL)prefersStatusBarHidden
  • (UIStatusBarAnimation)preferredStatusBarUpdateAnimation

所以您需要重写这两种方法来控制状态栏行为,并为您的应用程序返回适当的值(有关所有可能的值,请参阅 doc ref,它已明确解释)。

要控制应用程序启动期间的行为(显示的第一个控制器),请在项目设置 -> 常规 -> 部署信息下设置显示/隐藏

请注意,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'(使用 Storyboards 时调用)而不是 viewDidLoad 中这样做。原因是在 'viewDidLoad' 之前调用了 'prefersStatusBarHidden' 和 'preferredStatusBarUpdateAnimation'

于 2013-12-15T12:51:44.630 回答
12

您是否已经检查过 Info.plist 中的设置是否有效UIStatusBarHiddenYES请参阅文档:http: //developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW15

这将在应用程序启动时隐藏状态栏。

于 2012-01-23T17:41:42.667 回答