SwiftUI ToolbarItem 不显示来自 NavigationLink 的视图

jdm*_*718 7 swiftui

我不知道这是一个错误还是我在这里做错了什么。我在导航栏上添加了一个新按钮,它将呈现一个新视图。

struct MyView: View {
  
  @ObservedObject var viewModel = MyViewModel()
  
  var body: some View {
    List(viewModel.data, id: \.name) { data in
      NavigationLink(destination: MyDetailView(data: data.name)) {
        Text(data.name)
      }
    }
    .listStyle(InsetGroupedListStyle())
    .edgesIgnoringSafeArea(.all)
    .toolbar {
      ToolbarItem(placement: .navigationBarTrailing) {  
        NavigationLink(destination: MyDetailView()) {
          Text("New Element")
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这正在最新的 iOS 14 beta (beta 6) 和 Xcode 12 (beta 6) 上进行测试。据我所知,导航链接在列表中可以很好地呈现新视图,但在工具栏中,如图所示,情况并非如此。工具栏上的按钮可见且处于活动状态,但不会触发显示新视图。

Asp*_*eri 16

NavigationLink应该在里面 NavigationView。工具栏不在NavigationView,把按钮放在里面。

所以假设你在父母的某个地方

NavigationView {
   MyView()
}
Run Code Online (Sandbox Code Playgroud)

这是一个解决方案:

struct MyView: View {
  
  @ObservedObject var viewModel = MyViewModel()
  @State private var showNew = false

  var body: some View {
    List(viewModel.data, id: \.name) { data in
      NavigationLink(destination: MyDetailView(data: data.name)) {
        Text(data.name)
      }
    }
    .listStyle(InsetGroupedListStyle())
    .background(
        NavigationLink(destination: MyDetailView(), isActive: $showNew) {
          EmptyView()
        }
    )
    .edgesIgnoringSafeArea(.all)
    .toolbar {
      ToolbarItem(placement: .navigationBarTrailing) {  
        Button("New Element") {
            self.showNew = true
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 14

我发现使用带有空文本的 HStack 作为第一个元素也可以工作,它可以让 navigationLink 正确运行。

        .toolbar {
        ToolbarItem(placement: .navigationBarLeading) {
            HStack {
                Text("")
                NavigationLink(destination: SettingsView()) {
                    Image(systemName: "gear")
                        .font(.title)
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

  • 嗯,这很奇怪。 (3认同)