You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jonkykong SideMenu:如何在菜单上方推送视图控制器

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:38:02