【问题标题】: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
  • 我知道,但我需要它。

标签: ios swift uinavigationbar statusbar side-menu


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的回答,我希望有一个简单的解决方案。
    【解决方案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];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 2017-04-08
      • 2021-05-27
      • 2014-06-16
      • 2012-01-12
      相关资源
      最近更新 更多