SwiftUI navigationBarItems 在 TabView 中消失

Max*_*x B 2 swift swiftui

我有一个包含导航栏项目的视图,并将该视图嵌入到TabView. 但这样做时,栏项目不再出现。如果我在 a 之外调用视图,TabView一切都会按预期进行。

下面是一个小示例项目来说明我的问题,请注意,TabView最初不会调用ContentView,但稍后会调用:

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView{
            NavigationLink(destination: WarehouseOrderTabView()){
                Text("Click me")
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

struct WarehouseOrderTabView: View {
    var body: some View {
        TabView{
            TabView1().navigationBarTitle("Dashboard")
                .tabItem {
                    Image(systemName: "gauge")
                    Text("Dashboard")
            }

            TabView2().navigationBarTitle("Orders")
                .tabItem {
                    Image(systemName: "list.dash")
                    Text("Orders")
            }
        }
    }
}

struct TabView1: View {
    var body: some View {
        Text("TabView 1")
            //I would expect to see those bar items when displaying tab 1
            .navigationBarItems(trailing: (
                HStack{
                    Button(action: {
                    }, label: {
                        Image(systemName: "arrow.clockwise")
                            .font(.title)
                    })
                        .padding(.init(top: 0, leading: 0, bottom: 0, trailing: 20))
                    Button(action: {

                    }, label: {
                        Image(systemName: "slider.horizontal.3")
                            .font(.title)
                    })
                }
            ))
    }
}

struct TabView2: View {
    var body: some View {
        Text("TabView 2")
    }
}


Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?

buc*_*Boy 5

ANavigationView可以嵌入到 a 中TabView,反之则不然。

TabView包含不同的tabItem()(最多 5 个)可以包含您的观点。

您可以这样使用它。

TabView1.swift

struct TabView1: View {
    var body: some View {
        NavigationView {
            Text("TabView 1")
                .navigationBarTitle("Dashboard")
                .navigationBarItems(trailing:
                    HStack {
                        Button(action: {
                            // more code here
                        }) {
                            Image(systemName: "arrow.clockwise")
                                .font(.title)
                        }
                        Button(action: {
                            // more code here
                        }) {
                            Image(systemName: "slider.horizontal.3")
                                .font(.title)
                        }
                    }
                )
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

TabView2.swift

struct TabView2: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: YourNewView()) {
                Text("TabView 1")
            }
            .navigationBarTitle("Orders")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

内容视图.Swift

import SwiftUI

struct ContentView: View {
    var body: some View {
        TabView {
            TabView1()
               .tabItem {
                   Image(systemName: "gauge")
                   Text("Dashboard")
               }
            TabView2()
               .tabItem {
                   Image(systemName: "list.dash")
                   Text("Orders")
               }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你 :)

  • 那么如果我想使用NavigationViews和TabViews,我必须在我的整个应用程序中使用TabView吗?我的目标是仅拥有使用选项卡视图的特定视图,而应用程序的其余部分则无需使用。 (2认同)