如何让第三个视图控制器以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
相关产品推荐
相关产品推荐

