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

时间:2018-12-17 19:26:49

标签: ios swift uinavigationbar statusbar side-menu

我有一个基于Side Menu的自定义UIViewController类。 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
    }

}

这意味着appearance的{​​{1}}取决于当前的status bar ViewControllers属性,在本例中为prefersStatusBarHidden

但是我需要将false的一部分隐藏在status bar下。有办法实现吗?

我所拥有的:

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

enter image description here

但是当显示菜单时,...

enter image description here

P.S。我尝试使用this answer,但并没有帮助我。

3 个答案:

答案 0 :(得分:3)

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

您可以在侧面菜单中使用与状态栏的文本颜色相同的背景颜色,在视图控制器上使用一些相反的颜色。在这种情况下,状态栏的文本颜色将与补充菜单的背景颜色相同,这意味着该文本将不可见。因此,这将使您的一半状态栏处于隐藏状态,而另一半则没有隐藏状态。

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

答案 1 :(得分:1)

答案是正确的,您不能仅隐藏状态栏的一部分。 但是,您可以通过重建自己的状态栏克隆并按需要显示它来给您一个几乎完美的错觉:iOS为您提供了所需的信息:

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

答案 2 :(得分:0)

此代码段实际上将隐藏视图的状态栏

        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];