【问题标题】:iOS storyboard - Disable status bar on storyboard onceiOS 故事板 - 禁用故事板上的状态栏一次
【发布时间】:2012-02-17 01:15:40
【问题描述】:

Interface Builder 中使用Storyboard 时,Xcode 是否有办法完全禁用状态栏,这样当我创建一个新的View Controller 时,我就不必一直打开“状态栏”了" 从推断到无。

【问题讨论】:

    标签: ios xcode uiviewcontroller xcode-storyboard


    【解决方案1】:

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

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

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

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

    1) 全局显示/隐藏您应用的所有视图控制器的状态栏

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

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

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

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

    2) 让您的所有 viewController 单独控制状态栏(= 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'

    【讨论】:

    • 回复:“请注意,iOS 7 仅支持单一外观样式 (UIStatusBarStyleLightContent),其他所有样式均已弃用!”实际上它支持两个。 UIStatusBarStyleDefault 用于浅色背景,UIStatusBarStyleLightContent 用于深色背景。
    【解决方案2】:

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

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

    【讨论】:

    • 这仅在UIViewControllerBasedStatusBarAppearanceNO 时有效
    • 我认为问题可能更清楚。我认为提问者想问的问题,我也想问的是如何在故事板中隐藏状态栏,所以我们在故事板中也看不到它,而不仅仅是在应用程序运行时。对于这种情况,这在 Xcode 9.3 中不起作用,无论有没有 @AlexanderFarber 给出的附加设置
    猜你喜欢
    • 2012-08-22
    • 2016-01-11
    • 2012-10-11
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多