在iOS中隐藏状态栏而不删除其视图

时间:2015-01-28 12:40:15

标签: ios objective-c iphone ios7

我想在按下按钮时隐藏我的iPhone应用程序中的状态栏,我想在按下另一个按钮时再次显示它。

我尝试通过覆盖视图控制器中的-(BOOL)prefersStatusBarHidden来隐藏状态栏,但这也会从顶部删除其视图。

因此在删除此状态栏时会出现跳转。我想要做的只是隐藏状态栏上的内容,同时保持状态栏的背景 例如:您可以在gmail应用中检查相同的功能。在gmail应用程序中打开侧面抽屉时,只有状态栏上的内容被隐藏,没有跳转。

4 个答案:

答案 0 :(得分:0)

  • 您需要在状态栏下显示全屏视图。在视图顶部保留额外的20px,为状态栏留出空间。
  • 使用autoLayout。但请勿参考“顶部布局指南”或“底部布局指南”。而是使用SuperView Top / Bottom
  • 在控制器的viewDidLoad方法中添加以下代码行 或者在容器控制器中,如果你使用任何。

    self.edgesForExtendedLayout = UIRectEdgeAll; self.extendedLayoutIncludesOpaqueBars = YES; self.automaticallyAdjustsScrollViewInsets = NO;

第一行,self.edgesForExtendedLayout = UIRectEdgeAll;包括布局的所有边。 第二个,self.extendedLayoutIncludesOpaqueBars = YES;在布局中也包含不透明条。如果您的状态栏不是半透明的,则此行涵盖案例。 第三行self.automaticallyAdjustsScrollViewInsets = NO;指定不调整视图的滚动插入。

答案 1 :(得分:0)

我通过iOS13的additionalSafeAreaInsets属性解决了此问题。在iOS13上,没有其他解决方案对我有用。 隐藏状态变量时,将additionalSafeAreaInsets的上限值设置为20,取消隐藏时将其再次设置为0

对于带有缺口的设备,无需更改安全区域插图。仅对其他设备执行此操作。

答案 2 :(得分:-1)

设置一个bool作为你的切换开/关并将其返回到' prefersStatusBarHidden':

- (BOOL)prefersStatusBarHidden {
    return self.yourBool;
}

要更改statusBar状态,请更改bool的值并在动画块中调用此方法:

self.yourBool = NO;
[self setNeedsStatusBarAppearanceUpdate];

答案 3 :(得分:-1)

    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]){
        [self prefersStatusBarHidden];
        [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
    }
    else{
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
    }