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

时间:2015-05-13 15:44:31

标签: objective-c iphone ios8 statusbar

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

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

使用

[[UIApplication sharedApplication] setStatusBarHidden:YES];

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

[[UIApplication sharedApplication] setStatusBarHidden:NO];

这对于纵向方向可以正常工作但是如果我旋转设备并转到横向,iOS 8中的通常默认行为是隐藏状态栏但是因为我在上面的指令中手动将其设置为NO它将覆盖该状态行为,如果我处于横向状态,它将始终在我的应用中的所有视图上显示状态栏。

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

2 个答案:

答案 0 :(得分: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为状态栏设置动画。

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

答案 1 :(得分:0)

好的,所以经过一番头脑风暴后,如何在不使用

的情况下隐藏状态栏
baz.qux

所以它没有覆盖iOS 8的默认行为,我研究了一下,我做的是拉伸视图,因此它占用整个屏幕(状态栏高度),然后我有

确保

SELECT
  paym.*
FROM 
  PAYMENTS-table paym
INNER JOIN
  PERMITS-table perm ON paym.permitID = perm.permitId
WHERE
  perm.zipCode = 'A1234'

查看窗口级别已设置为基本上覆盖状态栏,这样每当我进入全屏模式时,我的视图会进入状态栏的顶部,每当我离开它时我只需要设置窗口使用

恢复正常
[[UIApplication sharedApplication] setStatusBarHidden:YES];

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