Ios 侧边菜单如何覆盖状态栏的一部分

Ios 侧边菜单如何覆盖状态栏的一部分,ios,swift,Ios,Swift,我的iOS应用程序中有一个屏幕,有侧菜单,当我滑动这个侧菜单时,我希望它覆盖状态栏(但我不希望状态栏完全隐藏),我只是想知道与侧菜单重叠的部分,在侧菜单下,而不是在它前面,有人能帮我吗?(我正在应用程序中使用swift 4.2) (此侧菜单只是另一个我在主ViewController内外设置动画的ViewController)在状态栏上显示侧菜单的一种可能方式是使用带有wndowLevel=.statusBar的UIWindow,该窗口将显示状态菜单UIViewController。下面是我做的

我的iOS应用程序中有一个屏幕,有侧菜单,当我滑动这个侧菜单时,我希望它覆盖状态栏(但我不希望状态栏完全隐藏),我只是想知道与侧菜单重叠的部分,在侧菜单下,而不是在它前面,有人能帮我吗?(我正在应用程序中使用swift 4.2)
(此侧菜单只是另一个我在主ViewController内外设置动画的ViewController)

在状态栏上显示侧菜单的一种可能方式是使用带有
wndowLevel=.statusBar的UIWindow,该窗口将显示状态菜单UIViewController。下面是我做的一个快速实现:

func presentSideMenu() {
    let vc = UIViewController() // side menu controller
    vc.view.backgroundColor = .red
    window = UIWindow()
    window?.frame = CGRect(x: -view.bounds.width, y: 0, width: view.bounds.width, height: view.bounds.height)
    window?.rootViewController = vc
    window?.windowLevel = .statusBar
    window?.makeKeyAndVisible()
    window?.isHidden = false
    window?.addSubview(vc.view)
}
然后,您可以将平移识别器添加到视图中,并相应地更改UIWindow的框架。还是一个简单的片段:

func hideSideMenu() {
    window?.isHidden = true
    window = nil
}

@objc func pan(recognizer: UIPanGestureRecognizer) {
    if recognizer.state == .began {
        presentSideMenu()
    } else if recognizer.state == .changed {
        let location = recognizer.location(in: view)
        window?.frame = CGRect(x: -view.frame.width + location.x, y: 0, width: view.frame.width, height: view.frame.height)
    } else if recognizer.state == .ended {
        hideSideMenu()
    }
}

请注意,您应该保持对UIWindow的强引用,否则它将立即被释放。也许你应该考虑是否通过状态栏是一个好主意。希望这有帮助

不,它只是一个ViewController,我添加了另一个ViewController作为它的子对象,并通过按钮动作或滑动在内部和外部设置动画