【问题标题】:Hide/show the status bar in iOS 8 when full screen button pressed按下全屏按钮时隐藏/显示 iOS 8 中的状态栏
【发布时间】:2015-05-13 15:44:31
【问题描述】:

我已经在 stackOverflow 上搜索了很多关于 iOS 8 中这个问题的问题,但我还没有找到一个可以帮助我解决我的特殊情况的问题。

在我的应用程序中,我有一个按钮可以进入全屏模式,在这种情况下,它只会隐藏我编写的导航栏,并且我希望它也能隐藏状态栏。

使用

[[UIApplication sharedApplication] setStatusBarHidden:YES];

我成功隐藏状态栏并进入所述全屏模式,当尝试离开该模式并使用计数器指令时会出现问题

[[UIApplication sharedApplication] setStatusBarHidden:NO];

这适用于纵向,但是如果我旋转设备并转到横向,iOS 8 中通常的默认行为是隐藏状态栏,但由于我在上面的说明中手动将其设置为 NO,它会覆盖它如果我处于横向,它将始终在我的应用程序中的所有视图上显示状态栏。

所以我的问题是,有没有办法恢复 iOS 8 在横向时隐藏状态栏的默认行为?

【问题讨论】:

    标签: objective-c iphone ios8 statusbar


    【解决方案1】:

    我想出的解决方案:

    我使用 UINavigationController 作为我所有视图控制器的“超级控制器”。

    我继承了 UINavigationController。在那里我实现- (BOOL)prefersStatusBarHidden 并在我的视图控制器中调用:

    - (BOOL)prefersStatusBarHidden {
        return [self.navigationController prefersStatusBarHidden];
    }
    

    在 UINavigationController 我做:

    - (BOOL)prefersStatusBarHidden {
        BOOL phoneLandscape = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && CGRectGetWidth(self.view.frame) > CGRectGetHeight(self.view.frame);
        return _shouldHideStatusBar || phoneLandscape;
    }
    

    _shouldHideStatusBar ivar 确定栏是否应该隐藏。

    当然你需要将View controller-based status bar appearance设置为YES

    完美模仿 iOS 8 行为,您甚至可以使用 - (UIStatusBarAnimation)preferredStatusBarUpdateAnimation 为状态栏设置动画。

    唯一的问题是在视图控制器转换期间以交互方式显示和隐藏栏。不知道如何实现。

    【讨论】:

      【解决方案2】:

      好的,经过一番头脑风暴之后,关于如何在不使用状态栏的情况下隐藏状态栏

      [[UIApplication sharedApplication] setStatusBarHidden:YES];
      

      为了不覆盖 iOS 8 的默认行为,我进行了更多研究,我所做的是拉伸视图,使其占据整个屏幕(具有状态栏高度),然后我不得不确定

      self.view.window.windowLevel = UIWindowLevelStatusBar;
      

      视图窗口级别设置为基本上覆盖状态栏,这样每当我进入全屏模式时,我的视图就会出现在状态栏的顶部,而每当我离开它时,我所要做的就是设置窗口使用

      恢复正常水平
      self.view.window.windowLevel = UIWindowLevelNormal;
      

      通过这些说明,我能够模拟我想要的全屏模式,而无需更改 iOS 8 在更改为横向和隐藏状态栏时的实际行为。

      【讨论】:

      • 我也有同样的问题。即使使用 -prefersStatusBarHidden 也不会导致 iOS 8 的行为,即使我觉得应该这样做。我想用你的解决方案,没有办法让状态栏进出动画?您的解决方案是否遇到任何问题?
      • 到目前为止,我遇到的解决方案没有任何问题,我知道它不是“最干净”的解决方案,也是最漂亮的解决方案,但它适用于我真正想要的,即模拟全屏模式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多