SwiftUI 工具栏未显示在 NavigationLink 视图上

SwiftUI toolbar not showing on a NavigationLink view

我正在尝试在导航链接内部的视图上显示工具栏。当我导航到第三个视图时,我收到以下消息:

2020-09-15 23:09:31.097289-0500 CountTime[35018:3542166] [Assert] displayModeButtonItem is internally managed and not exposed for DoubleColumn style. Returning an empty, disconnected UIBarButtonItem to fulfill the non-null contract.

并且未显示工具栏。这只发生在 iPhone,而不是 iPad。我正在使用 Xcode 12 GM。

代码如下:

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink(
                destination: SecondView(),
                label: {
                    Text("Navigate")
                })
        }
    }
}

struct SecondView: View {
    var body: some View {
        ZStack {
            NavigationLink(
                destination: Text("Destination")
                    .toolbar {
                        ToolbarItem(placement: ToolbarItemPlacement.bottomBar) {
                                Button(action: {
                                    print("sharing")
                                }) {
                                    Image(systemName: "square.and.arrow.up")
                                }
                        }
                    },
                label: {
                    Text("Navigate")
                })
        }
    }
}

displayModeButtonItem is internally managed and not exposed for DoubleColumn style

在您的情况下,SwiftUI 出于某种原因尝试以 DoubleColumn 样式呈现 NavigationView。

一个可能的解决方案是明确指定样式:

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: SecondView()) {
                Text("Navigate")
            }
        }
        .navigationViewStyle(StackNavigationViewStyle())
    }
}

我遇到了一些问题。

.toolbar {
      ToolbarItemGroup(placement: .navigationBarTrailing) {
        Button(action: {
          showEditView = true
        }, label: {
          Text("Edit")
        })
      }
}

不起作用,但已弃用的 navigationBarItems 起作用。

    .navigationBarItems(trailing:
                          Button(action: {
                            showEditView = true
                          }, label: {
                            Text("Edit")
                          })
    )