首页 > 解决方案 > 如何导航到新视图但删除它与 NavigationView 的连接?

问题描述

我有一个嵌入到 NavigationView 中的登录流程,但是一旦成功,新视图就是 TabView。但是,我不需要此 TabView 成为导航堆栈的一部分。选项卡中的所有视图都有自己的 NavigationView。因此,一旦用户登录,我需要以某种方式摆脱原始 NavigationView。我附加了不需要的行为,这是每个选项卡视图中的一个空导航栏,以及想要的行为,当我退出应用程序和从没有 NavigationView 的视图开始。

TD;LR 不需要:

NavigationView -> LoginView -> (if Successful) TabView

通缉:

    NavigationView -> LoginView -> if Successful then
    TabView - >

这是一个代码片段:

    struct ContentView: View
{
    @State var isActive = false
    var body: some View
    {
        NavigationView
        {
            VStack(alignment: .center, spacing: 16.0)
            {
                NavigationLink(destination: LoginAndRegistrationView(), isActive: $isActive)
                {
                    EmptyView()
                }
                Button(action: {
                    isActive = true
                }, label: {
                    Text("Log in or create account")
                        .frame(maxWidth: .infinity)
                })
                    .buttonStyle(.bordered)
                    .controlSize(.large)
                    .controlProminence(.increased)
                Spacer()
            }
            .padding(.all, 16)
        }
    }
}
    
struct LoginAndRegistrationView: View
{
    var body: some View
    {
        VStack
        {
            NavigationLink(destination: MainHomeView())
            {
                Text("Skip")
            }
        }
    }
        
}

struct MainHomeView: View {
    @State var tabSelection : CurrentTab = .startWorkout
    @Environment(\.colorScheme) var currentTheme
    
    var body: some View {
        
        TabView(selection: $tabSelection)
        {
            
            
            View1()
                .tabItem {
                    Image(systemName: Constants.ImageConstants.feedImg)
                    
                    Text("Feed")
                }
                .navigationBarTitle("")
                .navigationBarHidden(true)
                .navigationBarBackButtonHidden(true)
                .tag(CurrentTab.feed)
            

            View2()
                .tabItem {
                     Image(systemName: Constants.ImageConstants.settingsImg)
                    Text("Settings")
                }.navigationBarTitle("")
                .navigationBarHidden(true)
                .navigationBarBackButtonHidden(true)
                .tag(CurrentTab.settings)
            
        }
        .navigationBarTitle("")
        .navigationBarHidden(true)
        .navigationBarBackButtonHidden(true)
        
    }
}

不受欢迎的行为: 不良行为

正确行为: 正确的行为

标签: swiftswiftuiswiftui-navigationview

解决方案


推荐阅读