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

如何让第三个视图控制器以overCurrentContext样式显示并返回至第一个视图控制器,同时显示第二个视图控制器作为背景?

如何让第三个视图控制器以overCurrentContext样式显示并返回至第一个视图控制器,同时显示第二个视图控制器作为背景?

嘿,你的问题其实出在跳转方式用错了!modalPresentationStyle是给**模态跳转(present)**用的属性,而你用了pushViewController——这是导航栈的入栈操作,完全不搭边,所以overCurrentContext根本没生效,自然只能看到灰色背景啦。

给你两个关键步骤的修正方案:

1. 修改第二个VC的跳转代码(用模态跳转替代push)

因为第三个VC需要自己的导航栏,所以我们要把它包裹在一个UINavigationController里,再设置模态样式:

let detailViewController = ThirdVC()
// 给第三个VC套个导航控制器,保证它有导航栏
let navController = UINavigationController(rootViewController: detailViewController)
// 设置模态展示样式为overCurrentContext,这样就能看到背后的第二个VC了
navController.modalPresentationStyle = .overCurrentContext
// 模态弹出这个导航控制器
self.present(navController, animated: true, completion: nil)

2. 修改第三个VC的返回按钮逻辑

现在第三个VC是模态弹出的,所以需要先关闭模态窗口,再让第二个VC的导航栈跳回第一个VC:

// 先关闭当前的模态页面
self.dismiss(animated: true) {
    // 获取弹出当前模态窗口的那个导航控制器(也就是第二个VC所在的导航栈)
    if let presentingNav = self.presentingViewController as? UINavigationController {
        // 跳转到导航栈的根控制器(第一个VC)
        presentingNav.popToRootViewController(animated: true)
    }
}

这样操作后,第三个VC会以半透明样式显示在第二个VC上方,点击返回按钮时,先收起第三个VC,然后自动回到第一个VC,完全符合你的需求~

备注:内容来源于stack exchange,提问作者Alex Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 10:33:06