11

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

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

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

4

3 回答 3

20

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

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

NavigationView {
   MyView()
}

这是一个解决方案:

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
        }
      }
    }
  }
}
于 2020-08-26T17:04:21.030 回答
19

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

        .toolbar {
        ToolbarItem(placement: .navigationBarLeading) {
            HStack {
                Text("")
                NavigationLink(destination: SettingsView()) {
                    Image(systemName: "gear")
                        .font(.title)
                }
            }
        }
于 2020-09-23T19:35:27.960 回答
1

如果您的导航链接指向带有键盘输入的视图,则使用 Asperi 解决方案可能不起作用。

导航链接后,新视图中的工具栏正确加载,但是当使用键盘提供输入并关闭键盘时,所有工具栏项都会消失

解决方案是将 NavigationLink 不在 View 中,而是在 navigationBarItems 中,例如:

.navigationBarItems(
                leading:
                    NavigationLink(
                        destination: Creator(),
                        isActive: $showCreator,
                        label: {
                            Text("")
                        }))
于 2020-11-18T10:37:54.400 回答