我可以覆盖菜单按钮标签的“设置后变暗”颜色吗?
下面的 GIF 显示了一个清晰明亮的菜单项,在新选择后会变暗。 (此系统样式的默认行为(例如,在触控板首选项中)。
但它不符合可访问性标准,例如 WCAG 要求活动控件中该字体大小的亮度对比度 > 4.5:1(系统默认值为 ~ 2)。
我试过了:
- setting
accentColor
and foregroundColor
到处
- using
onChange
更新输入到上述修饰符中的 @State 颜色
- using
onReceive
for NSMenu.didSendActionNotification
或从对代表的呼叫中menuDidClose
方法(正在寻找一些外观设置)
- 使用
DefaultMenuStyle
,不是无边界的
- 加速
brightness
or contrast
,但这会引入别名问题
有什么建议么?也许我应该使用选择器?我应该将此标记为 Apple 的可访问性问题吗?
struct BareExample: View {
var body: some View {
Menu { menuContents }
label: { menuLabel }
.menuStyle(BorderlessButtonMenuStyle())
.fixedSize()
}
var menuContents: some View {
ForEach(sortOptions) { option in
Button(option.rawValue) { setSortOrder(option) }
.accentColor(labelColor)
.foregroundColor(labelColor)
}
}
var menuLabel: some View {
HStack {
Image(systemName: sortIcon)
Text(sortOrderLabel)
}
.accentColor(labelColor)
.foregroundColor(labelColor)
}
@State var sortOrder: PaletteSortOrder = .sequential
var sortOrderLabel: String { sortOrder.rawValue }
let sortIcon = "arrow.up.arrow.down"
let sortOptions = PaletteSortOrder.allCases
@State var labelColor = Color.white
func setSortOrder(_ order: PaletteSortOrder) {
sortOrder = order
labelColor = Color.white
}
}
public enum PaletteSortOrder: String, CaseIterable, Identifiable {
case sequential = "Sequential"
case byLuminance = "Luminance"
case byWorstPairwiseContrast = "Pairwise Contrast"
public var id: String { rawValue }
}
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)