iOS Xcode Segues开发:登录页跳转后全屏展示并禁用下拉返回手势
问题根因
iOS 13及以上版本系统对模态跳转的默认样式做了调整,默认采用UIModalPresentationStyle.pageSheet样式,该样式下页面不会占满全屏,同时自带下拉 dismiss手势,就是你当前遇到的可下拉返回登录页的场景。
适配方案
方案1:Storyboard Segue 可视化配置(适配你当前基于Segue开发的场景)
这是改动最小的方案,直接通过Xcode属性面板配置即可:
- 打开项目的Storyboard文件,找到登录页到首页的Segue连线并选中
- 打开右侧「Attributes Inspector(属性检查器)」面板,找到
Presentation配置项 - 将默认值
Automatic/Page Sheet修改为Full Screen - 配置完成后重新运行项目即可,此时跳转的首页会全屏展示,且默认关闭下拉返回手势

方案2:代码动态配置(适配手动触发Segue或纯代码跳转的场景)
如果你需要通过代码控制跳转样式,可对应修改跳转逻辑:
Swift代码示例
// 手动跳转场景 let homeVC = HomeViewController() homeVC.modalPresentationStyle = .fullScreen present(homeVC, animated: true) // prepareForSegue 中配置场景 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard segue.identifier == "你设置的Segue唯一ID" else { return } segue.destination.modalPresentationStyle = .fullScreen }
Objective-C代码示例
// 手动跳转场景 HomeViewController *homeVC = [[HomeViewController alloc] init]; homeVC.modalPresentationStyle = UIModalPresentationFullScreen; [self presentViewController:homeVC animated:YES completion:nil]; // prepareForSegue 中配置场景 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"你设置的Segue唯一ID"]) { segue.destinationViewController.modalPresentationStyle = UIModalPresentationFullScreen; } }
补充场景适配
如果你后续有需求保留半高的pageSheet展示样式,仅禁用下拉返回手势,可添加以下配置:
// Swift targetVC.isModalInPresentation = true
// Objective-C targetVC.modalInPresentation = YES;
该配置不会修改页面展示样式,仅拦截下拉 dismiss手势,用户只能通过你自定义的返回按钮触发返回操作。
内容的提问来源于stack exchange,提问作者Mark A. Rupert
相关产品推荐
相关产品推荐

