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

SwiftUI 如何实现新页面上浮原有页面下沉的动画,是否有对应官方API?

SwiftUI 提供了官方 API 实现你描述的交互效果,该效果是 iOS 系统原生的模态弹窗交互,基础能力从 iOS 13 开始支持,进阶配置支持 iOS 15 及以上版本。

你描述的效果示例如下图:
效果示例图

实现代码示例
import SwiftUI

struct MainView: View {
    // 控制弹窗显隐的状态变量
    @State private var showSheet = false
    
    var body: some View {
        Button("打开弹窗") {
            showSheet.toggle()
        }
        // 调用系统原生sheet修饰符
        .sheet(isPresented: $showSheet) {
            SheetContentView()
                // 可选配置:自定义弹窗高度(iOS 15+支持,medium为半高、large为全屏)
                .presentationDetents([.medium, .large])
        }
    }
}

// 弹窗内容视图
struct SheetContentView: View {
    // iOS 15+ 自带的关闭方法,低版本可通过绑定显隐状态传递实现关闭
    @Environment(\.dismiss) private var dismiss
    
    var body: some View {
        NavigationStack {
            List {
                Text("弹窗内容项1")
                Text("弹窗内容项2")
            }
            .navigationTitle("弹窗标题")
            .toolbar {
                // 配置左上角关闭叉号按钮
                ToolbarItem(placement: .navigationBarLeading) {
                    Button {
                        dismiss()
                    } label: {
                        Image(systemName: "xmark")
                    }
                }
            }
        }
    }
}
效果说明
  • 原有页面下沉、新页面从底部上浮的动画为系统默认自带,不需要额外编写动画逻辑
  • 非全屏高度的弹窗系统会默认支持下拉关闭手势,也可通过 .interactiveDismissDisabled(true) 禁止该手势
  • 部分场景下系统会自动生成顶部关闭按钮,无需手动配置
  • 如有特殊动画自定义需求,也可使用 transition 配合 withAnimation 手动实现转场效果,普通业务场景直接使用系统 sheet API 即可满足需求。

内容的提问来源于stack exchange,提问作者yimkong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:51:02