我使用自定义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?
2条答案
按热度按时间4dc9hkyq1#
当您创建自己的按钮样式时,您可以使用可访问性环境变量来使样式响应用户更改。
对于按钮形状设置,环境属性是
\.accessibilityShowButtonShapes
,因此您可以监视该值并相应地调整样式。例如,如果您希望某个形状的背景在需要显示按钮形状时可见,则可以使用变量来调整其不透明度:ojsjcaue2#
你可以使用一个默认样式的虚拟按钮作为基础视图,并将你的自定义按钮应用为覆盖。当按钮形状打开时,按钮形状将显示在前景中的样式后面。
通过使虚拟按钮成为基础视图,而不是将其显示为背景层,当按钮形状打开时添加的额外填充将对整个形状生效。因此,没有必要自己添加任何填充物。
您会注意到虚拟按钮的标签是隐藏的。这可以防止它被看到,但它仍然在布局中占据相同的空间。因此,当按钮形状打开时,形状在前景中具有适合标签的大小。此外,按下按钮时的覆盖应用于基础视图,因此它也采用基础视图的大小。