SwiftUI ToolbarItemGroup for Keyboard on iOS16



由于新的NavigationStack有相当多的问题,包括一个相当严重的内存泄漏,在这个时候,我仍然使用旧的NavigationView与iOS 15+的构建目标。

然而,运行iOS 16的设备不再在键盘中显示ToolbarItemGroup内容。ToolbarItem(placement: . navigationbartrailing)工作得很好,但是ToolbarItemGroup(placement: .keyboard)不再显示内容。

下面是我用于键盘工具栏项的代码:

.toolbar {
ToolbarItemGroup(placement: .keyboard) {
HStack {
Spacer()
Button {
isFocused = nil
} label: {
Image(systemName: "keyboard.chevron.compact.down")
}
}
}
}

这应该在键盘的顶部显示图像,允许用户在点击时不聚焦。它在iOS 15上运行良好,但在iOS 16上却无法显示。

我在一个真实的设备上测试,而不是模拟器。

我在iOS 16.2上的工作

我有完全相同的问题。不幸的是,@kittonian的解决方案并没有为我工作,但以下做:保持HStack,但在其左侧添加一个空的Text元素。

.toolbar {
ToolbarItem(placement: .keyboard) {
HStack {
Text("")
Spacer()
Button("Done") {
field = nil
}
}
}
}

这似乎是iOS 16的又一个bug。看起来,如果你把整个键盘工具栏包装在HStack中,它将不会出现在iOS 16中,然而,如果你想象HStack首先隐式地包围了所有键盘工具栏元素,然后删除HStack包装,一切都会正常工作。

另外,只要你的整个键盘工具栏没有被包裹在HStack中,你的工具栏就可以有子HStack元素。

解决方案如下:

.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Spacer()
Button {
isFocused = nil
} label: {
Image(systemName: "keyboard.chevron.compact.down")
}
}
}

最新更新