PAYATHON 2026

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 文档、相关复现与解决方案

备注:内容仅供参考。