使用jonkykong SideMenu:如何在菜单上方推送视图控制器
我之前也碰到过一模一样的情况,刚好可以给你梳理清楚解决思路:
你已经把menuDismissOnPush设为false阻止了菜单关闭,但推送的视图控制器层级不对,这是因为默认的push操作是在原导航栈中添加页面,而SideMenu的菜单视图本身处于独立的层级结构里。要让推送的页面显示在菜单上方,得从这两个方向调整:
1. 优先推荐:用模态呈现替代Push操作
官方提示里提到的modalPresentationStyle = .overFullScreen其实是针对模态场景的,这也是最稳妥的解决方案。既然要让页面覆盖在菜单上方,直接用模态呈现而非push就可以实现:
// 实例化你要展示的目标视图控制器 let targetVC = YourTargetViewController() // 设置模态样式为全屏覆盖,这样会显示在所有视图上方 targetVC.modalPresentationStyle = .overFullScreen // 可选:设置过渡动画,比如从底部滑入 targetVC.modalTransitionStyle = .coverVertical // 执行模态呈现 present(targetVC, animated: true)
这种方式下,菜单不会关闭,新页面也会稳稳地显示在菜单上方,完全符合你的需求。
2. 若必须用Push操作:调整菜单层级
如果业务逻辑要求必须用push跳转,那得修改SideMenu的层级配置,让导航栈的视图层级高于菜单:
首先找到你初始化SideMenu的代码,比如:
SideMenuManager.default.leftMenuNavigationController = UISideMenuNavigationController(rootViewController: LeftMenuVC()) SideMenuManager.default.addPanGestureToPresent(toView: self.navigationController!.navigationBar)
然后添加配置,调整菜单的呈现模式:
// 切换菜单的呈现模式,让导航视图层级优先 SideMenuManager.default.menuPresentMode = .viewSlideOut
或者手动修改菜单视图的z轴层级(注意:可能影响菜单交互,需要测试):
if let menuView = SideMenuManager.default.leftMenuNavigationController?.view { // 把菜单层级设为低于导航栈视图 menuView.layer.zPosition = -1 }
不过这种方式不如模态呈现稳定,优先推荐第一种方案。
内容的提问来源于stack exchange,提问作者Adam Zarn
相关产品推荐
相关产品推荐

