iOS故事板 - 如何在故事板中禁用状态栏

12

在使用Interface BuilderStoryboard时,有没有一种方法可以完全禁用状态栏,这样当我创建一个新的View Controller时,我就不需要不断地将“状态栏”从默认更改为无。

2个回答

24

这是一个完全符合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:在每个视图控制器中,您现在可以通过覆盖以下内容来确定是否显示/隐藏状态栏:

  • (BOOL)prefersStatusBarHidden
  • (UIStatusBarAnimation)preferredStatusBarUpdateAnimation

因此,您需要重写这两个方法来控制状态栏行为,并为应用程序返回适当的值(请参阅文档引用以获取所有可能的值,它很清楚地解释了)。

要在应用程序启动期间控制行为(显示的第一个控制器),请在项目设置->常规->部署信息下设置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' 之前被调用。


5
请注意,iOS 7只支持一种外观样式(UIStatusBarStyleLightContent),其他所有样式都已弃用!实际上它支持两种。UIStatusBarStyleDefault用于浅色背景,UIStatusBarStyleLightContent用于深色背景。 - William Denniss

12

12
UIViewControllerBasedStatusBarAppearanceNO 时,此方法才有效。 - Alexander Farber
4
我认为问题可以更清晰一些。我认为提问者想要询问的,我也想知道的是如何在Storyboard中隐藏状态栏,以便我们在Storyboard中看不到它,而不仅仅是在应用程序运行时隐藏。对于这种情况,在Xcode 9.3中无论是否使用@AlexanderFarber提供的额外设置,都无法实现。 - user2239333

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接