iOS故事板 - 在故事板上禁用状态栏一次

时间:2012-01-23 17:26:05

标签: ios xcode uiviewcontroller xcode-storyboard

Xcode使用Storyboard中的Interface Builder完全禁用状态栏是否有办法,以便在我创建新的View Controller时不断将“状态栏”从推断变为无。

2 个答案:

答案 0 :(得分:24)

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

来自Apple doc':信息属性列表主要参考':

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

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

1)全局显示/隐藏所有应用的viewControllers状态栏

首先回答你的问题,为你的所有应用程序viewControllers制作单一的全局显示/隐藏设置

步骤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中添加一个按钮,然后使用以下代码通过动画来打开/关闭条形码。\ / p>

- (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中设置。原因是在'viewDidLoad'之前调用'prefersStatusBarHidden'和'preferredStatusBarUpdateAnimation'

答案 1 :(得分:12)

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

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