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

Swift中如何在不同ViewController或NavigationController间实现全屏切换?如何不通过Segue实现弹窗式视图切换

解决Swift视图跳转的两个问题

嘿,刚接触Swift遇到视图跳转的样式问题太正常了,我来帮你一步步搞定这两个需求~

一、通过Segue实现全屏切换到ViewController/NavigationController

你遇到的弹窗样式是因为Segue默认的Presentation Style不是全屏,只要修改这个设置就能实现全屏跳转,有两种方式:

方式1:在Storyboard里直接设置

  1. 选中你创建的Segue(两个视图之间的连线)
  2. 打开右侧的Attributes Inspector(属性检查器)
  3. 找到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:47:29