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

SwiftUI问题:关闭MyView的Sheet后需显示MyView而非ListView

问题解决:关闭Sheet后停留在MyView

问题原因

你的代码里,MyView的didDismiss方法调用了presentationMode.wrappedValue.dismiss(),这会在Sheet关闭时同时把当前的MyView从导航栈中移除,导致页面回退到ListView。

修复方案

删除didDismiss方法中多余的视图退出逻辑,只保留Sheet的关闭操作即可。

修正后的完整代码

struct ContentView: View {
    var body: some View {
        NavigationView {
            TabView {
                ListView().tabItem {
                        Label("list view", systemImage: "face.smiling")
                    }
                Text("list 2 content").tabItem {
                    Label("text", systemImage: "face.smiling")
                }
            }
        }
    }
}

struct ListView: View {
    var body: some View {
        ScrollView(.vertical, showsIndicators: false) {
            LazyHStack(alignment: .top) {
                LazyVStack {
                    NavigationLink(destination: MyView()) {
                        Text("test")
                    }
                }
            }
        }
    }
}

struct MyView: View {
    @State private var isShowingSheet = false
    var body: some View {
        Button(action: {
            isShowingSheet.toggle()
        }) {
            Text("Show Sheet")
        }
        .sheet(isPresented: $isShowingSheet) {
            VStack {
                Text("License Agreement")
                    .font(.title)
                    .padding(50)
                Text("""
                    Terms and conditions go here.
                """)
                .padding(50)
                Button("Dismiss",
                       action: { isShowingSheet.toggle() })
            }
        }
    }
}

关键修改点

  • 移除@Environment(\.presentationMode)的引用,无需在Sheet关闭时退出当前视图
  • 删除didDismiss方法和.sheet修饰符中的onDismiss参数,避免触发不必要的视图回退

修改后,关闭Sheet时只会隐藏弹窗,MyView会保留在导航栈中,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:52:47