【问题标题】:setStatusBarHidden deprecated, but only thing that workssetStatusBarHidden 已弃用,但唯一有效的方法
【发布时间】:2015-11-11 01:56:35
【问题描述】:

我已经尝试了所有我能找到的解决方案,包括:setStatusBarHidden is deprecated in iOS 9.0,但它们都不适用于我的应用程序。

这是一个简单的单视图应用程序。有一个导航栏,上面有一个按钮,状态栏应该显示在上面。

在我的 .plist 中:

状态栏最初是隐藏的:否

状态栏样式:UIStatusBarStyleLightContent

基于视图控制器的状态栏外观:否

更改其中任何一项似乎都没有任何区别。我选中了状态栏样式“在应用程序启动期间隐藏”选项,因为我不希望它出现在初始屏幕上。

我有:

- (BOOL)prefersStatusBarHidden 
{
    return NO;
}

-(UIStatusBarStyle)preferredStatusBarStyle
{
    NSLog(@"style");
    return UIStatusBarStyleLightContent;
}

setNeedsStatusBarAppearanceUpdate 在我的ViewController 中加载视图时肯定都会调用它们。

视图是在 .storyboard 中建立的,但许多字段也在 ViewController.m 中进行操作。在模拟指标中分配给状态栏的值似乎也没有任何效果。

我需要在启动屏幕期间隐藏状态栏并在 viewController 上可见。请帮我找到一个不使用已弃用的 setStatusbarHidden 的解决方案!

编辑:

我还没有解决这个问题,而且我肯定不会是唯一一个遇到这个问题的人!它发生在我编写的两个应用程序中。

【问题讨论】:

  • ViewController based status bar appearance 应设置为 YES 以使用 preferedStatusBarStyle 应返回 UIStatusBarStyleNone
  • UIStatusBarStyleNone 不是preferredStatusBarStyle 的声明标识符
  • 对不起。我很困惑。 return YESprefersSatusBarHidden
  • 隐藏视图控制器上的状态栏。我希望它显示在视图控制器上并在启动屏幕上隐藏。
  • 遇到同样的问题。

标签: ios objective-c ipad xcode6 ios9


【解决方案1】:

我一直在尝试解决同样的问题,我不知道为什么 setStatusBarHidden 和 setStatusBarStyle 已被弃用,因为新方法一点也不直观。

要在启动时隐藏状态栏,我的 plist 中有以下设置:

View controller-based status bar appearance: YES
Status bar is initially hidden: YES

然后在我的视图控制器中显示启动后的状态栏:

- (BOOL)prefersStatusBarHidden {    
    return NO;
}

-(UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

在我找到这个答案 https://stackoverflow.com/a/19365160/488611 之前,这仍然不起作用。所以在viewDidLoad中我也设置了导航栏样式:

self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;

这绝对没有意义,但有效。

【讨论】:

    【解决方案2】:

    你可以使用

    application.statusBarHidden=YES; 
    

    在 AppDelegate.m 中

    didFinishLaunchingWithOptions
    

    【讨论】:

    • 也已弃用
    【解决方案3】:

    在我看来,您应该更改UIViewControllerBasedStatusBarAppearance 的值。

    设置项目a的值文件.plist为

    UIViewControllerBasedStatusBarAppearance = NO

    并签入文件 AppDelegate 并设置代码

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

    希望我的解决方案能解决您的问题。

    【讨论】:

    • 我已经在 .plist 中设置了 UIViewControllerBasedStatusBarAppearance = NO,如问题中所述,并且 setStatusBarStyle 是一种已弃用的方法。这对我没有帮助,但感谢您的尝试。
    • 更改setStatusBarStyle。试试看代码。 -(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; }
    【解决方案4】:

    好的,我完全误解了你的问题。这是正确答案。

    将以下值添加到您的“info.plist”。

    Status bar is initially hidden : YES
    View Controller based status bar appearance : YES
    

    在你想显示状态栏的UIViewControllers上

    - (BOOL)prefersStatusBarHidden {
        return NO;
    }
    

    就是这样。

    【讨论】:

    • 还是不行。唯一似乎有任何区别的事情(除了已弃用的 setStatusBarHidden)是我是否在常规目标设置中设置了“在应用程序启动期间隐藏”。我也尝试过使用“需要全屏”设置,看看这是否有效果。不幸的是没有。
    【解决方案5】:

    我不是这方面的专家,但我用这些设置玩了一段时间,得出了以下结论。

    常规/部署信息: 状态栏样式:默认(黑色)、浅色 隐藏状态栏(复选框) 两者都仅更改启动屏幕上的状态栏。 请注意,如果您通过屏幕截图创建此图像并且屏幕截图包含状态栏,即使您已选中隐藏状态栏复选框,设备也会显示正在设置状态栏!我被这个欺骗了一段时间,然后我终于想到看看启动图像本身,并且照片中有一个状态栏,所以即使它确实有效,设置 Hide 似乎也从来没有工作过。我使用 Photoshop 从图像本身中删除了状态栏,之后启动状态栏按预期运行。

    信息/自定义 iOS 目标属性(这些更改 PLIST 中的值,因此您可以在任一位置更改它们): 状态栏最初隐藏:是/否 状态栏样式:灰色(默认)、透明黑色、不透明黑色 查看基于控制器的状态栏外观:是/否 如果您将状态栏最初隐藏设置为否,那么您将在视图控制器上拥有您想要的状态栏。如果要隐藏视图控制器上的状态栏,则必须将状态栏最初隐藏设置为是,并将基于视图控制器的状态栏外观设置为否。

    视图控制器/模拟指标的属性检查器 状态栏:无、推断、默认、浅色、黑色(已弃用) 这似乎对任何东西都没有影响,除了 StoryBoard 中视图控制器的外观,但在模拟器中没有。

    总结:要回答您的问题,请在“常规部署信息”下选中“隐藏状态栏”复选框。这将隐藏启动屏幕上的状态栏。确保您的启动屏幕图像中没有状态栏图片。 StoryBoard 或 Target 中的任何设置似乎都不会关闭视图控制器的状态栏,因此它似乎会像您想要的那样保持打开状态。但是,我没有测试任何程序化设置;我认为你不应该做任何这些,它会按照你想要的方式工作。

    【讨论】:

    • 我的启动画面上肯定没有状态栏,它和 ViewController 上显示的完全不同。
    猜你喜欢
    • 1970-01-01
    • 2015-09-15
    • 2021-02-04
    • 1970-01-01
    • 2016-06-08
    • 2012-09-20
    • 2020-11-28
    • 1970-01-01
    相关资源
    最近更新 更多