自定义ButtonStyle破坏辅助功能按钮形状显示的解决方法咨询
方案1:嵌套默认ButtonStyle保留原有行为
直接在自定义样式中先应用系统的DefaultButtonStyle(),再叠加自己的按压态效果,这样默认的辅助功能逻辑会被完整保留:
private struct ListCellButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label // 先应用默认按钮样式,保留辅助功能的按钮形状行为 .buttonStyle(DefaultButtonStyle()) // 叠加自定义的按压态遮罩 .overlay( Rectangle() .foregroundColor(configuration.isPressed ? .statePressed : .clear) ) } }
方案2:手动兼容辅助功能按钮形状开关
通过SwiftUI的环境变量读取辅助功能的按钮形状状态,手动添加对应的边框效果来模拟系统默认行为:
private struct ListCellButtonStyle: ButtonStyle { @Environment(\.accessibilityButtonShapes) private var isButtonShapesEnabled func makeBody(configuration: Configuration) -> some View { configuration.label // 自定义按压态颜色 .overlay( Rectangle() .foregroundColor(configuration.isPressed ? .statePressed : .clear) ) // 当辅助功能按钮形状开启时,添加模拟边框 .overlay( isButtonShapesEnabled ? RoundedRectangle(cornerRadius: 4) .stroke(Color.accentColor, lineWidth: 1) : nil ) } }
关于修改默认DefaultButtonStyle的说明
系统的DefaultButtonStyle是私有实现,无法直接修改或获取其源码。只能通过上述两种方式,要么嵌套默认样式复用逻辑,要么手动模拟辅助功能行为,来兼顾自定义样式和系统辅助功能要求。
内容的提问来源于stack exchange,提问作者Konstantin.Efimenko
相关产品推荐
相关产品推荐

