如何使用适当的可访问性修饰符覆盖 SwiftUI Picker

Posted

技术标签:

【中文标题】如何使用适当的可访问性修饰符覆盖 SwiftUI Picker【英文标题】:How to cover SwiftUI Picker with a proper accessibility modifiers 【发布时间】:2020-05-15 02:59:40 【问题描述】:

我有一个 SwiftUI 选择器:

Picker(selection: self.$selectedIndex, label: Text("")) 
    Text("△").font(.system(size: 20)).tag(0)
    Text("□").font(.system(size: 20)).tag(1)
    Text("○").font(.system(size: 20)).tag(2)
.pickerStyle(SegmentedPickerStyle())

想让 VoiceOver 可以访问它。尝试执行以下操作:

Picker(selection: self.$selectedIndex, label: Text("")) 
    Text("△").font(.system(size: 20)).tag(0).accessibility(label: Text("Triangle label"))
    Text("□").font(.system(size: 20)).tag(1).accessibility(label: Text("Square label"))
    Text("○").font(.system(size: 20)).tag(2).accessibility(label: Text("Circle label"))
.pickerStyle(SegmentedPickerStyle())

辅助功能检查器显示 label="△" 但我希望它应该显示 label="Triangle label"。

请帮助找出正确的解决方案。

【问题讨论】:

【参考方案1】:

我有一个类似的问题,我将它作为 FB8806682 提交给 Apple。我注意到两个有趣的因素,至少在 ios 14 上是这样。

    这仅在使用 SegmentedPickerStyle() 时发生。默认选择器将正确读取提供的标签。

    如果您激活屏幕上的任何控件(包括选择器本身!),那么分段选择器将开始读取正确的标签。

作为反馈助手条目的一部分,我创建了一个示例应用程序,它显示了两个选择器并演示了它们的区别。也可以使用on GitHub。

【讨论】:

干得好!看起来这个问题确实是一个需要由 Apple 修复的错误。

以上是关于如何使用适当的可访问性修饰符覆盖 SwiftUI Picker的主要内容,如果未能解决你的问题,请参考以下文章

使用受保护的访问修饰符覆盖没有访问修饰符的方法

有啥方法可以在 SwiftUI 中的可搜索导航修饰符上关闭自动更正/设置键盘类型

如何在 SwiftUI 中访问视图的修饰符?

访问修饰符,命名空间

C#访问修饰符

在 SwiftUI 的自定义视图中访问图像的修饰符