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
相关产品推荐
相关产品推荐

