Swift中如何在不同ViewController或NavigationController间实现全屏切换?如何不通过Segue实现弹窗式视图切换
解决Swift视图跳转的两个问题
嘿,刚接触Swift遇到视图跳转的样式问题太正常了,我来帮你一步步搞定这两个需求~
一、通过Segue实现全屏切换到ViewController/NavigationController
你遇到的弹窗样式是因为Segue默认的Presentation Style不是全屏,只要修改这个设置就能实现全屏跳转,有两种方式:
方式1:在Storyboard里直接设置
- 选中你创建的Segue(两个视图之间的连线)
- 打开右侧的Attributes Inspector(属性检查器)
- 找到Presentation选项,把它改成「Full Screen」
如果目标是NavigationController,也可以直接选中这个NavigationController,在它的属性检查器里把Presentation设置为Full Screen,这样通过Segue跳转到它时就是全屏的。
方式2:通过代码设置
如果需要更灵活的控制,可以在源ViewController的prepare(for:sender:)方法里手动修改目标视图的模态展示样式:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // 记得给你的Segue设置好Identifier,这里替换成你自己的ID if segue.identifier == "FullScreenSegue" { let destinationVC = segue.destination // 设置为全屏展示 destinationVC.modalPresentationStyle = .fullScreen } }
二、不通过Segue实现弹窗样式的视图切换
不需要Segue的话,我们可以手动实例化目标ViewController,设置它的模态展示样式为弹窗类型,再调用present方法弹出它。
步骤1:实例化目标ViewController
根据你的VC是在Storyboard里还是纯代码创建的,分两种情况:
情况A:从Storyboard实例化
首先给你的弹窗VC在Storyboard里设置好Storyboard ID(选中VC → Identity Inspector → Storyboard ID),然后用下面的代码:
// 替换成你的Storyboard名称和VC的ID let storyboard = UIStoryboard(name: "Main", bundle: nil) let popupVC = storyboard.instantiateViewController(withIdentifier: "PopupVC")
情况B:纯代码创建的VC
直接初始化你的自定义VC即可:
let popupVC = CustomPopupViewController()
步骤2:设置弹窗样式并弹出
iOS提供了多种弹窗样式,常用的有:
.pageSheet:iOS 13+默认的半屏弹窗(可上下拖动调整大小).formSheet:更小的表单式弹窗(适合展示少量内容).automatic:系统自动适配最合适的样式
设置好样式后调用present方法:
// 选择你需要的弹窗样式 popupVC.modalPresentationStyle = .pageSheet // 弹出视图,animated设为true会有过渡动画 present(popupVC, animated: true, completion: nil)
这样就能实现不用Segue的弹窗式视图切换啦~
内容的提问来源于stack exchange,提问作者Flomomo
相关产品推荐
相关产品推荐

