繁体   English   中英

按下全屏按钮时,隐藏/显示iOS 8中的状态栏

[英]Hide/show the status bar in iOS 8 when full screen button pressed

我一直在这里在stackOverflow上搜索有关iOS 8中此问题的很多问题,但是我还没有找到可以帮助我解决特定情况的问题。

在我的应用程序中,我有一个将进入全屏模式的按钮,在这种情况下,它将仅隐藏我已编码的navBar,我也希望它也隐藏状态栏。

运用

[[UIApplication sharedApplication] setStatusBarHidden:YES];

我可以成功隐藏状态栏并进入所说的全屏模式,尝试退出该模式并使用计数器指令时会发生问题

[[UIApplication sharedApplication] setStatusBarHidden:NO];

这对于纵向显示效果很好,但是如果我旋转设备并横向移动,iOS 8中通常的默认行为是隐藏状态栏,但是由于我在上面的指令中手动将其设置为NO,因此它将覆盖该行为,并且如果我是横向的,将始终在应用程序的所有视图上显示状态栏。

所以我的问题是,有没有一种方法可以还原iOS 8在横向模式下隐藏状态栏的默认行为?

我想出的解决方案:

我将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确定_shouldHideStatusBar是否应隐藏的位置。

当然,您需要将View controller-based status bar appearanceYES

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

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

好吧,经过一番脑力激荡之后,如何隐藏状态栏而不使用

[[UIApplication sharedApplication] setStatusBarHidden:YES];

为了不覆盖iOS 8的默认行为,我进行了更多研究,然后我进行了拉伸视图,以使其占据整个屏幕(带有状态栏高度),然后我必须确保

self.view.window.windowLevel = UIWindowLevelStatusBar;

设置了查看窗口级别,以便它基本上覆盖了状态栏,这样,每当我进入全屏模式时,我的视图就会移到状态栏的顶部,并且每当我离开它时,我所要做的就是将窗口级别设置为正常使用

self.view.window.windowLevel = UIWindowLevelNormal;

通过这些说明,我可以模拟我想要的全屏模式,而不必更改为横向和隐藏状态栏时的iOS 8实际行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM