【问题标题】:SwiftUI toolbar not showing on a NavigationLink viewSwiftUI 工具栏未显示在 NavigationLink 视图上
【发布时间】:2020-09-16 16:57:28
【问题描述】:

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

2020-09-15 23:09:31.097289-0500 CountTime[35018:3542166] [断言] displayModeButtonItem 是内部管理的,不会暴露给 双列样式。返回一个空的、断开连接的 UIBarButtonItem 履行非空合同。

并且工具栏没有显示。这只发生在 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")
                })
        }
    }
}

【问题讨论】:

    标签: ios swift swiftui swiftui-navigationlink xcode12


    【解决方案1】:

    displayModeButtonItem 是内部管理的,不会暴露给 双列样式

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

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

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

    【讨论】:

    • 这可行,现在工具栏正在显示,但视图之间工具栏的转换不平滑,并且有一条新的控制台消息:[Snapshotting] Snapshoting a view (0x7fcd53e17110, _UIButtonBarStackView) that has not been至少呈现一次需要 afterScreenUpdates:YES。
    • @Happygallo 看起来像是一条无害的调试消息。工具栏本身仍然存在问题。我建议您为所有视图添加一个工具栏,或者在视图顶部使用一个简单的流动按钮(没有工具栏)。
    【解决方案2】:

    我遇到了一些问题。

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

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

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

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2021-10-21
    • 1970-01-01
    • 2020-09-10
    • 2020-12-15
    • 2016-10-28
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    相关资源
    最近更新 更多