我正在尝试使用带有键盘放置的工具栏将“完成”按钮放在键盘上方。当应用程序启动并且键盘打开时,工具栏根本不显示,因此按钮不存在。
但是,如果我使用导航链接并导航到另一个屏幕,然后返回并点击文本字段,该按钮就会显示并按预期工作。当我退出应用程序并重新启动它时,工具栏也会显示。该问题出现在 iOS 17 中。在 iOS 16 上它可以正常工作。
这是示例代码:
struct ContentView: View {
@State private var amountField = ""
@FocusState var keyboardDismiss: Bool
var body: some View {
NavigationStack {
List {
NavigationLink(destination: Text("Screen 2")) {
Text("Go to screen 2")
}
TextField("0.00", text: $amountField)
.keyboardType(.decimalPad)
.focused($keyboardDismiss)
}
.navigationTitle("Test Keyboard")
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Spacer()
Button("Done") { keyboardDismiss = false }
}
}
}
}
}
找到了解决方法:向 NavigationStack 添加空导航路径为我解决了这个问题(到目前为止)。
@State var path = NavigationPath()
NavigationStack(path: $path) {
...
}