【问题标题】:how side menu can cover part of status bar侧边菜单如何覆盖状态栏的一部分
【发布时间】:2018-12-08 14:49:34
【问题描述】:

我的 iOS 应用程序中有一个带有侧边菜单的屏幕,当我滑动这个侧边菜单时,我希望它覆盖状态栏(但我不希望状态栏完全隐藏),我只是其中的一部分与侧面菜单重叠,进入侧面菜单,而不是前面,有人可以帮助我吗? (我在我的应用程序中使用 swift 4.2) (这个侧边菜单只是我在 MainViewController 中进行动画处理的另一个 ViewController)

【问题讨论】:

  • 不,它只是一个 ViewController,我添加了另一个 ViewController 作为它的子项,并通过按钮操作或滑动在内部和外部对其进行动画处理

标签: ios swift


【解决方案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 的框架。又是一个简单的 sn-p:

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 进行强引用,否则它将立即被释放。也许您应该考虑在状态栏上显示是否是一个好主意。希望这可以帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多