Objective c 按下全屏按钮时在iOS 8中隐藏/显示状态栏

Objective c 按下全屏按钮时在iOS 8中隐藏/显示状态栏,objective-c,iphone,ios8,statusbar,Objective C,Iphone,Ios8,Statusbar,我已经在stackOverflow上搜索了很多关于iOS 8中这个问题的问题,但是我还没有找到一个可以帮助我解决我的特殊情况的问题 在我的应用程序中,我有一个按钮,它将进入全屏模式,在这种情况下,它将只隐藏我编码的导航栏,我希望它也隐藏状态栏 使用 [[UIApplication sharedApplication] setStatusBarHidden:YES]; 我能够成功地隐藏状态栏并进入所述全屏模式,当尝试离开该模式并使用计数器指令时会出现问题 [[UIApplication shar

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

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

使用

[[UIApplication sharedApplication] setStatusBarHidden:YES];
我能够成功地隐藏状态栏并进入所述全屏模式,当尝试离开该模式并使用计数器指令时会出现问题

[[UIApplication sharedApplication] setStatusBarHidden:NO];
这对纵向方向很好,但如果我旋转设备并进入横向,iOS 8中通常的默认行为是隐藏状态栏,但由于我在上面的说明中手动将其设置为“否”,它将覆盖该行为,并且如果我处于横向,它将始终在我的应用程序中的所有视图上显示状态栏方向


所以我的问题是,有没有一种方法可以恢复iOS 8在横向环境中隐藏状态栏的默认行为?

好的,那么在头脑风暴之后,如何在不使用

[[UIApplication sharedApplication] setStatusBarHidden:YES];
为了不覆盖iOS 8的默认行为,我做了更多的研究,我所做的是拉伸视图,使其占据整个屏幕(状态栏高度),然后我必须确保

self.view.window.windowLevel = UIWindowLevelStatusBar;
视图窗口级别的设置基本上覆盖了状态栏,这样每当我进入全屏模式时,我的视图就会显示在状态栏的顶部,每当我离开时,我所要做的就是使用

self.view.window.windowLevel = UIWindowLevelNormal;

有了这些说明,我能够模拟我想要的全屏模式,而不会改变iOS 8在切换到横向和隐藏状态栏时的实际行为。

我提出的解决方案:

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

我对UINavigationController进行了子类化。在那里我实现
-(BOOL)preferssStatusBarHidden
,在我的视图中我调用控制器:

- (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;
}
其中,
\u应隐藏状态栏
ivar确定该栏是否应隐藏

当然,您需要将
查看基于控制器的状态栏外观
设置为

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


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

我也有同样的问题。即使使用-prefersStatusBarHidden也不会导致iOS 8的行为,尽管我觉得应该这样做。我想用你的解决方案,没有办法使状态栏进出动画?您的解决方案遇到任何问题吗?到目前为止,我遇到的解决方案没有任何问题,我知道它不是“最干净”的解决方案,也不是最漂亮的解决方案,但它适用于我真正想要的模拟全屏模式。