出现自定义侧菜单时如何隐藏状态栏的一部分

Posted

技术标签:

【中文标题】出现自定义侧菜单时如何隐藏状态栏的一部分【英文标题】:How to hide part of status bar, when custom side menu presented 【发布时间】:2019-05-18 05:01:30 【问题描述】:

我有一个基于UIViewController 的自定义Side Menu 类。 Side menu 的呈现如下:

extension UIViewController: MenuPresentableProtocol 

    func setupMenu() 
        guard let menu = AppDelegate.shared.menu else  return 
        menu.view.frame = view.bounds
        view.addSubview(menu.view)
        menu.view.frame.origin.x = -UIScreen.main.bounds.width
    


这意味着status barappearance 取决于当前的ViewControllers prefersStatusBarHidden 属性,在本例中为false

但我需要将status bar 的一部分隐藏在side menu 下。有没有办法实现这个?

这是我所拥有的:

菜单隐藏时,看起来不错。

但是当菜单出现时,...

附:我尝试使用this answer,但没有帮助。

【问题讨论】:

我认为最好 1) 在状态栏 下方 绘制菜单,或者 2) 在菜单打开时隐藏状态栏。 #1 更好,如果只是因为 #2 会导致屏幕在菜单出现和消失时上下跳跃 20 像素。 @NRitH, #2 - 糟糕的实现,我同意。我不想这样做。 #1 - 与我的实现没有区别,但状态栏是可见的,这让客户感到困惑。 如果您不向用户提供全屏体验(即查看照片/视频等全屏媒体),不建议隐藏状态栏(或部分状态栏)。您可能想看看来自 Apple 的 Status Bar HIG。 我知道,但我需要它。 【参考方案1】:

您可以完全隐藏状态栏,也可以完全显示。无法隐藏状态栏的一部分。

您可以在侧边菜单中使用与状态栏文本颜色相同的背景颜色,并在视图控制器上使用一些相反的颜色。在这种情况下,状态栏的文本颜色将与您的侧边菜单的背景颜色相同,这意味着文本将不可见。因此,它将使您的一半状态栏隐藏而一半不隐藏。

你不会在 appstore 上找到任何你想要的应用程序,因为这根本不可能。如果某些应用程序希望具有相同的效果,请检查其侧边菜单的背景颜色和状态栏的文本颜色。两者都是一样的。

【讨论】:

【参考方案2】:

答案是正确的,你不能只隐藏状态栏的一部分。 但是,您可以通过重建自己的状态栏克隆并按照您的意愿显示它,从而产生几乎完美的错觉:ios 为您提供所需的信息:

time, 你的carrier name, battery level 和电池charging state... 您将错过真正的蜂窝信号强度信息,但您需要暂时绘制一个假信号,以便向您展示菜单和制作动画...

最后,这更像是一件艺术品,而不是硬编码:)

【讨论】:

感谢您的回答,我希望有一个简单的解决方案。【参考方案3】:

这段代码 sn-p 实际上会用一个视图隐藏你的状态栏

        UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, 20)] autorelease];
        view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"PortraitNavigationBG"]]; 
        //or use same color as your background

        [self.navigationController.view addSubview:view];

【讨论】:

以上是关于出现自定义侧菜单时如何隐藏状态栏的一部分的主要内容,如果未能解决你的问题,请参考以下文章

Android 隐藏状态栏、标题栏、透明状态栏的几种方式

Android 状态栏的设置

UIStatusBar iOS上状态栏的自定义颜色

iOS 7隐藏导航栏时如何更改状态栏的颜色?

隐藏状态栏的视图控制器的交互式视图控制器转换

安卓11小窗模式下隐藏状态栏