SwiftUI中NavigationView内Sheet无法正常工作的问题求助
解决SwiftUI中非全屏Sheet跳转全屏视图的问题
问题核心
你遇到的两个方案的问题根源:
- 方案一:NavigationView在Sheet外时,Sheet不属于NavigationView的层级结构,内部的NavigationLink无法触发导航栈跳转,因此无效。
- 方案二:NavigationView放入Sheet内时,导航栈的目标视图会继承Sheet的尺寸限制,导致SignView高度和Sheet一致,无法全屏显示。
正确解决方案
直接在Sheet内部用fullScreenCover替代NavigationLink来触发全屏的SignView,既保留非全屏Sheet的展示,又能让目标视图全屏适配。
修改后的完整代码
import SwiftUI struct LoginView: View { @State var isSheetPresented = false @State var isSignViewPresented = false var body: some View { VStack(alignment: .center) { Spacer() Button(action: { isSheetPresented = true }) { Text("Sign up") .padding(.horizontal, 23) .padding(20) .font(.system(size: 25, weight: .heavy)) .background(Color.blue) .foregroundColor(.white) .cornerRadius(10) } .sheet(isPresented: $isSheetPresented) { VStack { Button(action: { isSignViewPresented = true }) { Text("MyCard") .font(.title) .foregroundColor(.black) } } .presentationDetents([.height(300)]) .fullScreenCover(isPresented: $isSignViewPresented) { SignView() } } } } } struct SignView: View { var body: some View { ZStack { Color.green.edgesIgnoringSafeArea(.all) Text("Sign View") .font(.largeTitle) .foregroundColor(.white) } } }
代码说明
- 移除外层NavigationView,无需它处理Sheet内的跳转逻辑。
- Sheet内的按钮通过触发
isSignViewPresented状态唤起fullScreenCover,替代原有的NavigationLink。 fullScreenCover会以全屏方式展示SignView,完全适配屏幕尺寸,解决框架适配问题。
内容的提问来源于stack exchange,提问作者Evan
相关产品推荐
相关产品推荐

