swiftui - 在 SwiftUI 中对 UI 进行更新时关闭工具栏菜单
问题描述
我注意到对 UI 进行更新时工具栏菜单关闭的问题。我做了一个测试项目来验证是这样的,代码如下所示。以下是重现该问题的步骤。
- 打开菜单
- 在对 UI 进行更新之前等待 5 秒(在本例中为名称)
- 菜单会自动关闭
我发现这个问题是直接由按钮动作代码引起的:selection = String(describing: View2.self)
. 这是我试图找出答案的测试用例。
- 如果我评论
selection
代码,则问题不存在。 - 为了测试它不是因为它链接到 NavigationLink,我注释了 NavigationLink 并取消了
selection
代码的注释,但问题仍然存在。 - 如果我用
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"
}
}
}
}
}
解决方案
推荐阅读
- reactjs - 我已经更改了我的本地反应文件/组件,并且在网络中我没有看到这些更改
- android - 完全机智结束,所有在线解决方案都不适用于错误“会话'应用程序':安装 APKs 错误”
- swift - 如何从带有文本框的自定义单元格中获取 didselectrowat?
- php - 我想知道为什么不会生成 $Articles
- amazon-web-services - 使用 Lambda 将 S3 数据从一个 AWS 账户推送到另一个 S3 存储桶
- redux - Flutter redux:如何在注销时清除状态并在登录时重新初始化
- python - Python3:异步检测按键并将它们传达给主线程
- amazon-web-services - Dynamodb 一次批量扫描与多次单次获取
- c# - 我在 C# 中遇到了一个简单列表的问题(不显示实际列表)
- angular - 使用“ng generate”或“ng add”时出错