是否可以在SwiftUI中不使用navigationView/navigationStack创建工具栏项?

xbp102n0  于 2023-01-16  发布在  Swift
关注(0)|答案(1)|浏览(175)

请看下面的代码。使用该代码我可以看到工具栏项没有任何问题。但如果我删除或替换navigationView与例如一个VSack的工具栏项消失。
是否可以在没有navigationView/navigationStack的情况下添加工具栏项?我对这种可能性特别感兴趣,因为它可以解决我在多个相互连接的视图中使用多个navigationView的问题。
工作代码:

import SwiftUI

struct Restaurant: Identifiable {
    let id = UUID()
    let name: String
}

// A view that shows the data for one Restaurant.
struct RestaurantRow: View {
    var restaurant: Restaurant

    var body: some View {
        Text("Come and eat at \(restaurant.name)")
    }
}

// Create three restaurants, then show them in a list.
struct SwiftUIView: View {
    let restaurants = [
        Restaurant(name: "Joe's Original"),
        Restaurant(name: "The Real Joe's Original"),
        Restaurant(name: "Original Joe's")
    ]
    
    var body: some View {
        NavigationStack {
            List(restaurants) { restaurant in
                RestaurantRow(restaurant: restaurant)
            }
            .toolbar {
                ToolbarItem(placement: .automatic) {
                    Text("Great Toolbar")
                }
            }
        }
    }
}

struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        SwiftUIView()
    }
}

不显示工具栏项的代码:

var body: some View {
        VStack {
            List(restaurants) { restaurant in
                RestaurantRow(restaurant: restaurant)
            }
            .toolbar {
                ToolbarItem(placement: .automatic) {
                    Text("Great Toolbar")
                }
            }
        }
    }
}

删除了navigationView,将其替换为其他内容,如VStack。

svmlkihl

svmlkihl1#

在iOS(和iPadOS)上,toolbar修饰符需要一个封闭的NavigationViewNavigationStack。然而,正如我在回答other question时解释的,您只需要一个封闭的NavigationViewtoolbar修饰符将向上搜索视图层次结构以找到它。
注意,如果你在工作表中显示一个视图,你需要在工作表中有一个NavigationView,工作表有自己的视图层次结构,独立于显示工作表的视图。

相关问题