首页 > 解决方案 > 在 SwiftUI 中对 UI 进行更新时关闭工具栏菜单

问题描述

我注意到对 UI 进行更新时工具栏菜单关闭的问题。我做了一个测试项目来验证是这样的,代码如下所示。以下是重现该问题的步骤。

  1. 打开菜单
  2. 在对 UI 进行更新之前等待 5 秒(在本例中为名称)
  3. 菜单会自动关闭

我发现这个问题是直接由按钮动作代码引起的:selection = String(describing: View2.self). 这是我试图找出答案的测试用例。

  1. 如果我评论selection代码,则问题不存在。
  2. 为了测试它不是因为它链接到 NavigationLink,我注释了 NavigationLink 并取消了selection代码的注释,但问题仍然存在。
  3. 如果我用selection简单的打印语句替换代码,则问题不存在。

我正在使用 Xcode 12.5.1。在 iOS 14 上测试。

我该如何解决这个问题?

struct ContentView: View {
    @State var name = "John"
    @State var selection: String?
    
    var body: some View {
        NavigationView {
            ZStack {
                NavigationLink(destination: View2(), tag: String(describing: View2.self), selection: $selection){}
                
                Text("Hello \(name)")
                    .padding()
            }
            .toolbar {
                Menu {
                    Button {
                        selection = String(describing: View2.self)
                    } label: {
                        Text("Edit")
                    }
                    
                    Button {
                        selection = String(describing: View2.self)
                    } label: {
                        Text("Help")
                    }
                } label: {
                    Text("Menu")
                }
            }
            .onAppear {
                DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
                    name = "Hunter"
                }
            }
        }
    }
}

标签: swiftui

解决方案


推荐阅读