iOS Storyboard - 一次禁用 Storyboard上的状态栏

标签 ios xcode uiviewcontroller xcode-storyboard

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/

相关文章:

c# - 在 Xcode/Xamarin 中创建状态栏

ios - 在提交到 Appstore 之前,如何将应用程序定位为在 iPad 2 或更新版本(不是 iPad 1)上运行?

iphone - applicationWillEnterForeground 内存泄漏

ios - addChildViewController 方法只能用于将 subview Controller 添加到 containerViewController 吗?

objective-c - 从nsstring iOS删除空字符

ios - 如何在 Swift 中硬编码 UIView 的大小属性

ios - 为什么 Interface Builder 不能为约束设置负倍数,即使 [NSLayoutConstraint constraintWithItem :] can?

ios - ViewController 的高度设置不正确

iphone - 如何将文件添加到 xcode iphone 项目中的 .plist?

ios - 裁剪一个70*70px的正方形为正方形