【问题标题】:Hide status bar in iOS without removing its view在 iOS 中隐藏状态栏而不移除其视图
【发布时间】:2015-03-27 08:50:14
【问题描述】:

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

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

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

【问题讨论】:

  • 嗨,你解决了这个问题吗?如果解决了,您可以在这里发布您的解决方案吗?
  • 不,我找不到。
  • 我找到了解决方案,如果有人需要帮助,请发布作为答案

标签: ios objective-c iphone ios7


【解决方案1】:

我在 iOS13 中使用 additionalSafeAreaInsets 属性解决了这个问题。在 iOS13 上没有其他解决方案适合我。 隐藏状态 var 时将 additionalSafeAreaInsets 顶部值设置为 20,取消隐藏时再次将其设置为 0

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

【讨论】:

  • 这非常有用。如果我能找到一种在隐藏状态栏时得到通知的方法会更有帮助。感谢您的提示
  • @TMin 您可以对经理隐藏/取消隐藏状态栏,也可以添加观察员。要添加观察者,您可以查看stackoverflow.com/a/12832187/6662490
  • @BatuhanAltun 这是完美的!!!有很多相关的问题,但他们都有固定到superview的解决方案,而不是安全区域。我只想隐藏应用商店屏幕截图的状态栏,这很好用,非常感谢!
【解决方案2】:
  • 您需要使状态栏下方显示的视图全屏显示。在视图顶部多留出 20 像素,为状态栏留出空间。
  • 使用自动布局。但不要参考顶部布局指南或底部布局指南。而是使用 SuperView 顶部/底部
  • 在控制器的 viewDidLoad 方法中添加这些代码行 或在容器控制器中(如果您正在使用)。

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

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

【讨论】:

    【解决方案3】:

    设置一个布尔值作为你的开关,并在'prefersStatusBarHidden'中返回它:

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

    要改变 statusBar 的状态,改变 bool 的值并在动画块中调用这个方法:

    self.yourBool = NO;
    [self setNeedsStatusBarAppearanceUpdate];
    

    【讨论】:

    • 是的,我已经这样做了,但它完全删除了状态栏。如果我使用它,如果您将框架设置为隐藏状态栏的高度,框架会向上移动,但我想保留导航栏上方的状态栏高度
    • 也许尝试改变导航栏的高度?我查看了 gmail 的应用程序,老实说,它看起来不像是一个干净的过渡......这似乎是整个窗口的可能截图。
    【解决方案4】:
        if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]){
            [self prefersStatusBarHidden];
            [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
        }
        else{
            [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
        }
    

    【讨论】:

    • 没有。这没有回答问题。提问者说他​​们已经这样做了。他们正在专门寻找一种方法来阻止导航栏在状态栏隐藏时跳起来。
    猜你喜欢
    • 1970-01-01
    • 2014-02-08
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2023-04-04
    • 2016-01-03
    • 1970-01-01
    相关资源
    最近更新 更多