【问题标题】:SwiftUI Toolbar In a TabBar ViewTabBar 视图中的 SwiftUI 工具栏
【发布时间】:2021-12-12 10:38:28
【问题描述】:

我的第一个视图有一个带有标签栏视图的 NavigationView

struct TestView: View {
    var body: some View {
        NavigationView {
            TabTestView()
        }
    }
}

在标签栏中,我有两个视图,比如 TestView1 和 TestView2。

struct TabTestView: View {
    var body: some View {
        TabView {
            TestView1()
                .tabItem {
                    Label("Test 1", systemImage: "list.dash")
                }
            TestView2()
                .tabItem {
                    Label("Test 2", systemImage: "plus")
                }
        }
    }
}

我现在需要向 TestView1 添加一个工具栏按钮。这是我的尝试:

struct TestView1: View {
var body: some View {
    Text("Hello World")
        .navigationTitle("Test View 1")
        .toolbar {
              ToolbarItem(placement: .navigationBarTrailing) {
                    Button("Save") {
                        print("Toolbar button click")
                    }
                  }
        }
    }
}

虽然这会将导航标题添加到页面,但没有添加工具栏按钮,如下面的屏幕截图所示:

但是,如果我将工具栏添加到 TabTestView,如下所示,工具栏按钮会显示出来。

struct TabTestView: View {
    var body: some View {
        TabView {
            TestView1()
                .tabItem {
                    Label("Test 1", systemImage: "list.dash")
                }
            TestView2()
                .tabItem {
                    Label("Test 2", systemImage: "plus")
                }
        }
        .toolbar {
              ToolbarItem(placement: .navigationBarTrailing) {
                    Button("Save") {
                        print("Toolbar button click")
                    }
                  }
        }
    }
}

这是一个问题 - 单击按钮时要执行的代码取决于 TestView1 中的变量,将工具栏添加到 TabTestView 感觉不对,语义上工具栏“属于”TestView1。

任何想法将不胜感激。

【问题讨论】:

标签: swiftui toolbar swiftui-navigationview swiftui-tabview


【解决方案1】:

一旦我有了工作代码,我意识到我以前见过这个。这似乎是 SwiftUI 中的一个错误。 TabViewNavigationView 不能一起玩。你会发现我的很多答案都会在视图层次结构的顶部说一个NavigationViews,这就是你所做的。这在这种情况下不起作用。解决方法是在选项卡中的每个视图中分别放置一个NavigationViews 以使其正常工作。对于每个层次结构,您仍然可以获得所有正确的 NavigationViews 行为,但它是重复的。我不认为我曾经在上面提交过 Radar,但我今天会在此处发布 Radar 编号。

struct TestView: View {
    var body: some View {
        // NavigationView { //Remove this NavigationView
            TabTestView()
        // }
    }
}

struct TabTestView: View {
    var body: some View {
        TabView {
            TestView1()
                .tabItem {
                    Label("Test 1", systemImage: "list.dash")
                }
            TestView2()
                .tabItem {
                    Label("Test 2", systemImage: "plus")
                }
        }
    }
}

struct TestView1: View {
    var body: some View {
        NavigationView { // Add here
            Text("Hello World 1")
                .navigationTitle("Test View 1")
                .toolbar {
                    ToolbarItem(placement: .navigationBarTrailing) {
                        Button("Save") {
                            print("Toolbar button click")
                        }
                    }
                }
        }
    }
}


struct TestView2: View {
    var body: some View {
        NavigationView { // Add here
            Text("Hello World 2")
                .navigationTitle("Test View 2")
                .toolbar {
                    ToolbarItem(placement: .navigationBarTrailing) {
                        Button("Save") {
                            print("Toolbar button click")
                        }
                    }
                }
        }
    }
}

雷达编号为 FB9727010。

【讨论】:

  • 非常感谢 Yrb!
猜你喜欢
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 2021-10-21
  • 2020-02-15
  • 2021-12-25
  • 2022-06-20
相关资源
最近更新 更多