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

Ale*_*son 4 toolbar swift swiftui

请参阅下面的代码。使用该代码我可以毫无问题地看到工具栏项目。但是,如果我删除或替换 navigationView,例如 VSack,工具栏项就会消失。

是否可以在没有navigationView/navigationStack的情况下添加工具栏项?我对这种可能性特别感兴趣,因为它可以解决我在相互连接的多个视图中使用多个导航视图的问题。

工作代码:

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()
    }
}


Run Code Online (Sandbox Code Playgroud)

不显示工具栏项的代码:

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

删除了 navigationView,将其替换为 VStack 之类的其他内容。

rob*_*off 5

在 iOS(和 iPadOS)上,toolbar修饰符需要一个封闭的NavigationViewNavigationStack. 但是,正如我在回答您的其他问题时所解释的那样,您只需要一个随附的NavigationView. 修改toolbar器将在视图层次结构中搜索以找到它。

但请注意,如果您在工作表中呈现视图,则需要NavigationView该工作表内部的视图。该工作表具有自己的视图层次结构,独立于呈现该工作表的视图。