0

在下面的示例中,当我3rd View从 TabView 导航到然后单击 Button 以呈现工作表时,工作表被呈现但3rd View被弹出。不确定为什么要重新调用 TabView 主体。我尝试过以下事情:

  1. 有一个单独的 State 属性将其与 Navigation Link 绑定。
  2. 创建一个 StateObject 并在其中包含一个属性以与 Navigation Link 绑定。
  3. 直接使用不使用 isActive 参数的 Navigation Link。
struct TestView: View {

    @State var selectedTab: TabType = .home

    var body: some View {
        NavigationView {
            TabView(selection: $selectedTab) {
                ForEach(TabType.allCases, id: \.self) { tabType in
                    switch tabType {
                    case .profile:
                        ThirdView()
                            .navigationBarHidden(selectedTab == .profile)
                            .tag(tabType)
                            .tabItem {
                                Label(tabType.title, systemImage: "plus")
                            }
                    default:
                        SecondView()
                            .tag(tabType)
                            .tabItem {
                                Label(tabType.title, systemImage: "star")
                            }
                    }
                }
            }
        }
    }}

struct SecondView: View {
    var body: some View {
        VStack {
            Spacer()
            Text("2nd view")
            NavigationLink("3rd view", destination: ThirdView())
            Spacer()
        }
            .background(Color.green)
    }
}

struct ThirdView: View {

    @State var presentSheet = false

    var body: some View {
        ZStack {
            Color.gray
            VStack {
                Text("3rd view")
                Spacer()
                Button("Button") {
                    presentSheet = true
                }
                    .padding()
            }
        }
            .sheet(isPresented: $presentSheet) {
                VStack {
                    Spacer()
                    Text("This is sheet")
                    Spacer()
                }
            }
    }
}

enum TabType: CaseIterable {

    case home
    case discover
    case profile
    case more

    var image: Image {
        switch self {
        case .home:
            return Image(systemName: "plus")
        case .discover:
            return Image(systemName: "plus")
        case .profile:
            return Image(systemName: "plus")
        case .more:
            return Image(systemName: "plus")
        }
    }

    var title: LocalizedStringKey {
        switch self {
        case .home:
            return LocalizedStringKey("home")
        case .discover:
            return LocalizedStringKey("Discover")
        case .profile:
            return LocalizedStringKey("Me")
        case .more:
            return LocalizedStringKey("Shop")
        }
    }
}
4

0 回答 0