为什么在 TabView 上显示工作表会更改我选择的选项卡?

Luk*_*rse 6 ios swiftui

我有一个带有两个 tabItems 的 TabView(都是 NavigationViews)。我想在每个选项卡上都有一个 navigationBarItem,它将在 TabView 顶部推送一个工作表。然而,每当我呈现该工作表时,它似乎将我的选择设置为 0。

import SwiftUI

struct SheetTest: View {
    @State var selection = 0
    @State var showSheet = false
    
    var body: some View {
        TabView(selection: $selection) {
            NavigationView {
                Text("Tab 1")
                    .navigationBarItems(trailing: button)
            }.navigationViewStyle(StackNavigationViewStyle())
            .tabItem({
                Image(systemName: "1.circle")
                Text("Tab 1")
            })
            
            
            NavigationView {
                Text("Tab 2")
                    .navigationBarItems(trailing: button)
            }.navigationViewStyle(StackNavigationViewStyle())
            .tabItem({
                Image(systemName: "2.circle")
                Text("Tab 2")
            })
            
        }
        .sheet(isPresented: $showSheet) {
            Text("Sheet")
        }
    }
    
    var button: some View {
        return Button(action: {
            showSheet = true
        }, label: {
            Text("button")
        })
    }
}

struct SheetTest_Previews: PreviewProvider {
    static var previews: some View {
        SheetTest()
    }
}
Run Code Online (Sandbox Code Playgroud)

Geo*_*e_E 4

您需要为每个项目添加标签:

/* ... */
.tabItem({
    Image(systemName: "1.circle")
    Text("Tab 1")
})
.tag(0)  // <-- Here
Run Code Online (Sandbox Code Playgroud)

和:

/* ... */
.tabItem({
    Image(systemName: "2.circle")
    Text("Tab 2")
})
.tag(1)  // <-- And here
Run Code Online (Sandbox Code Playgroud)