UIDatepicker VoiceOver 错误的 accessibilityLabel

UIDatepicker VoiceOver wrong accessibilityLabel

我正在实施 VoiceOver,我在 iOS 13.x 上遇到关于日期选择器值的文本读取问题。日期选择器区域设置更改后,可访问性字符串似乎没有更改。 几个月的列有美国日的字符串, 选择四月后它说 fünf von dreissig (5 from 30),它应该说 4 from 12.

在我设置的日期选择器上 datePicker.locale = Locale.init(identifier: "de_DE")datePicker.calendar = Calendar.init(identifier: Calendar.Identifier.gregorian)。我也尝试设置 datePicker.accessibilityLanguage = "de-DE".

有什么想法吗?


YouTube 上的 VoiceOver

Any ideas?

无法 修改 UIDatePicker 内的语言环境以用于 VoiceOver。
将考虑的语言是设备设置中的 selected 语言。

解释
UIDatePicker 元素是一个包含许多其他元素的包装器,VoiceOver 用户可以与之交互 (在您的情况下为年、月和日).
事实上,UIDatePicker 本身不可访问,因为视图及其子视图 can't be both accessible alltogether.

datePicker.accessibilityLanguage = "de-DE"是正确的,因为UIControl符合UIAccessibility informal protocol,但是VoiceOver不会分析它(这里不能访问父视图).

定义日期的视图是唯一可以被 VoiceOver 访问和解释为 adjustable 元素的视图,但不幸的是,它们无法在开发中实现。
UIDatePicker 是一种黑匣子,它允许很少的操作,但会阻止访问其子视图,例如……这可能是这里的一个很好的调查线索。

解决方案
在您的用例中,UIDatePicker 无法自定义任何内容,但是为了使用 VoiceOver 实现您的目标,我建议使用 Apple website:

中建议的 UIPickerView

If you want to handle the selection of arbitrary items from a list, use a UIPickerView object.

  • 创建一个 UIPickerView 具有不同轮子的对象。
  • adjustable 特征定义它们中的每一个,以允许 VoiceOver 用户 select 列表中的一个元素。
  • Return a NSAttributedString 为了 add an attribute 将指定语言或像您一样使用 accessibilityLanguage,两者都应该是有效的。

与交钥匙 UIDatePicker 对象相比需要做很多工作,但我认为您可以通过 在日期选择器中调整 VoiceOver 的语言来实现您的目的遵循这个道理。