我使用自定义 ButtonStyle 来更改按下状态下按钮的颜色
Button(action: action) {
bodyView
}
.buttonStyle(ListCellButtonStyle())
private struct ListCellButtonStyle: ButtonStyle {
func makeBody(configuration: Configuration) -> some View {
configuration.label
.overlay(
Rectangle()
.foregroundColor(configuration.isPressed ? .statePressed : .clear)
)
}
}
但这会删除在辅助功能模式下显示按钮形状的默认行为:
Settings > Accessibility > Display & Text Size -> Button Shapes -> true
如何获取DefaultButtonStyle的代码来复制这个相关人员,或者如何不创建新的ButtonStyle,而是修改DefaultButtonStyle?
当您创建自己的按钮样式时,可以使用辅助功能环境变量使您的样式响应用户更改。
对于按钮形状设置,环境属性是
\.accessibilityShowButtonShapes
,因此您可以相应地调整您的样式。例如,如果您有一个形状,当需要显示按钮形状时,您希望其背景可见,您可以使用该变量来调整其不透明度:
private struct ListCellButtonStyle: ButtonStyle {
@Environment(\.accessibilityShowButtonShapes) private var accessibilityShowButtonShapes
func makeBody(configuration: Configuration) -> some View {
// some view
.background {
Color.gray.opacity(accessibilityShowButtonShapes ? 0.2 : 0.0)
}
}
}