SwiftUI:NavigationBarItem 的 ContextMenu 中的 Picker 问题
SwiftUI: Problem with Picker inside ContextMenu of NavigationBarItem
我正在尝试在 navigationBarItems
的 .contextMenu
上使用 Picker
。但是,行为并不像我预期的那样,我无法判断这是 Apple 错误还是我做错了什么 (XCode 13.4)。
用户从下拉列表中选择一个项目后,变量值发生变化但重新打开上下文菜单,错误的项目被标记为“已选择”。
我已经创建了最基本的演示来说明它。真实设备上的行为相同 (iPhone 11 / iOS 15.4.1).
struct ContentView: View {
@State private var isAutoRefresh = true
var body: some View {
NavigationView {
Text("Auto refresh is: \(String(isAutoRefresh))")
.navigationBarTitle("Demo")
.navigationBarItems(
trailing:
Button(action: {}, label: {
Image(systemName: "arrow.clockwise")
})
.contextMenu {
Picker(selection: self.$isAutoRefresh, label: Text("")) {
Text("Manual refresh").tag(false)
Text("Auto refresh").tag(true)
}
.pickerStyle(InlinePickerStyle())
}
)
}
}
}
这是一个错误吗?我可以使用任何解决方法吗?
上下文菜单创建一次并缓存,因此我们需要在外部发生任何更改后重建它。
这是一个修复程序。使用 Xcode 13.3 / iOS 15.4
测试
.contextMenu {
Picker(selection: self.$isAutoRefresh, label: Text("")) {
Text("Manual refresh").tag(false)
Text("Auto refresh").tag(true)
}
.pickerStyle(InlinePickerStyle())
}.id(isAutoRefresh) // << here !!
替代: 只是为了使用 Menu
而不是 Button
和上下文菜单(如果设计适用),比如
Menu {
Picker(selection: self.$isAutoRefresh, label: Text("")) {
Text("Manual refresh").tag(false)
Text("Auto refresh").tag(true)
}
.pickerStyle(InlinePickerStyle())
} label: {
Image(systemName: "arrow.clockwise")
}
我正在尝试在 navigationBarItems
的 .contextMenu
上使用 Picker
。但是,行为并不像我预期的那样,我无法判断这是 Apple 错误还是我做错了什么 (XCode 13.4)。
用户从下拉列表中选择一个项目后,变量值发生变化但重新打开上下文菜单,错误的项目被标记为“已选择”。
我已经创建了最基本的演示来说明它。真实设备上的行为相同 (iPhone 11 / iOS 15.4.1).
struct ContentView: View {
@State private var isAutoRefresh = true
var body: some View {
NavigationView {
Text("Auto refresh is: \(String(isAutoRefresh))")
.navigationBarTitle("Demo")
.navigationBarItems(
trailing:
Button(action: {}, label: {
Image(systemName: "arrow.clockwise")
})
.contextMenu {
Picker(selection: self.$isAutoRefresh, label: Text("")) {
Text("Manual refresh").tag(false)
Text("Auto refresh").tag(true)
}
.pickerStyle(InlinePickerStyle())
}
)
}
}
}
这是一个错误吗?我可以使用任何解决方法吗?
上下文菜单创建一次并缓存,因此我们需要在外部发生任何更改后重建它。
这是一个修复程序。使用 Xcode 13.3 / iOS 15.4
测试.contextMenu {
Picker(selection: self.$isAutoRefresh, label: Text("")) {
Text("Manual refresh").tag(false)
Text("Auto refresh").tag(true)
}
.pickerStyle(InlinePickerStyle())
}.id(isAutoRefresh) // << here !!
替代: 只是为了使用 Menu
而不是 Button
和上下文菜单(如果设计适用),比如
Menu {
Picker(selection: self.$isAutoRefresh, label: Text("")) {
Text("Manual refresh").tag(false)
Text("Auto refresh").tag(true)
}
.pickerStyle(InlinePickerStyle())
} label: {
Image(systemName: "arrow.clockwise")
}