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

时间:2018-12-08 14:49:35

标签: ios swift

我的iOS应用程序中有一个带有侧面菜单的屏幕,当我滑动该侧面菜单时,我希望它覆盖状态栏(但我不希望状态栏被完全隐藏),我只想知道与侧边菜单重叠的菜单,要进入侧边菜单,而不是正下方,有人可以帮助我吗? (我在应用中使用的是Swift 4.2) (此侧面菜单只是我在MainViewController内外添加动画的另一个ViewController)

1 个答案:

答案 0 :(得分:1)

在状态栏上显示侧面菜单的一种可能方法是使用带有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,否则将立即释放它。也许您应该考虑在状态栏上显示是否是个好主意。希望这可以帮助。