SwiftUI中SplashScreen跳转TabView崩溃问题求助
问题分析与解决方案
核心问题
- 跳转目标错误:启动页
SplashScreenView激活后跳转的是系统默认TabView(),而非你自定义的MembersTabView。 - 环境对象缺失:
MembersTabView依赖@EnvironmentObject var modelMember:MemberModel,但跳转时未注入该对象实例,SwiftUI无法找到依赖导致崩溃——这是TabView跳转独有的问题,其他View无此依赖所以能正常跳转。
修复步骤
1. 修正启动页的跳转目标
将SplashScreenView中的TabView()替换为自定义的MembersTabView():
struct SplashScreenView: View { @State private var isActive = false @State private var size = 0.8 @State private var opacity = 0.5 var body: some View { if isActive == true { // 替换为自定义的MembersTabView MembersTabView() } else { VStack { VStack{ Image(systemName: "hare.fill") .font(.system(size: 80)) .foregroundColor(.red) Text("IALVS App") .font(Font.custom("Baskerville-Bold", size: 26)) .foregroundColor(.black.opacity(0.80)) } .scaleEffect(size) .opacity(opacity) .onAppear{ withAnimation(.easeIn(duration: 1.2)) { self.size = 0.9 self.opacity = 1.0 } } } .onAppear { DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { withAnimation { self.isActive = true } } } } } }
2. 注入环境对象
在App入口结构体中,为根视图注入MemberModel实例,确保MembersTabView能获取到依赖:
@main struct IALVSApp: App { var body: some Scene { WindowGroup { SplashScreenView() // 注入MemberModel环境对象 .environmentObject(MemberModel()) } } }
补充说明
如果MemberModel需要初始化参数,可在注入时传入对应值,例如:
.environmentObject(MemberModel(initialData: []))
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

