iOS 26 中键盘工具栏里的 Spacer 为什么不生效?
数据阿明
结论
可以在键盘工具栏中放入 Color.clear,用它撑开可用宽度,再通过 overlay 叠加原来的 HStack。这样 HStack 的布局区域会变宽,里面的 Spacer 也有空间展开。这个方法适用于题目描述的 iOS 26 表现。工具栏布局可能受设备宽度和动态字体设置影响,建议在目标设备上确认效果。
为什么 Spacer 会挤在一起
复现代码将按钮和三个 Spacer() 放在 ToolbarItemGroup(placement: .keyboard) 中。Spacer 只能占用父布局提供的剩余空间。如果键盘工具栏把内容容器收紧到按钮所需的宽度,HStack 就没有多余空间可分配,按钮看起来会挤在一起。
一种已报告的解决方法是在工具栏项目中放入 Color.clear,再把按钮布局作为 overlay 叠加上去。Color 会尽可能占据可用空间,因此 overlay 中的 HStack 也会获得更宽的布局范围。
修改方式
保留现有的 keyboardButtons,将工具栏内容改成:
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
Color.clear
.overlay {
keyboardButtons
}
}
}
keyboardButtons 中的按钮和 Spacer() 无需重写。可以先检查常见屏幕宽度和不同动态字体大小下的间距。如果效果仍不符合预期,再根据目标设备调整布局方式。
注意事项
这是针对题述现象的布局变通方案,不能据此断定所有 iOS 26 设备或配置都会出现相同问题。题目中的 UIDesignRequriesCompatibility 标志也会影响表现,同时会改变应用采用的设计兼容方式。如果需要保留玻璃效果,可以先验证 Color.clear 和 overlay 方案。
参考:Apple SwiftUI 键盘工具栏 placement 文档、相关复现与解决方案
备注:内容仅供参考。
