iOS16上的SwiftUI ToolbarItemGroup用于键盘

6
由于新的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的设备上没有任何显示。

我是在真实设备上进行测试,而不是模拟器。

2个回答

3

以下内容适用于iOS 16.2

我遇到了完全相同的问题。不幸的是,@kittonian的solution对我没有用,但是以下方法有效:保留HStack,但在其左侧添加一个空的Text元素。

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

0

这似乎是又一个 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")
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接