Touch ID 的 VoiceOver 辅助功能标签

VoiceOver accessibility label for Touch ID

我正在努力确保我正在开发的 iOS 应用程序可以访问,并且正在尝试实施 VoiceOver 以确保这一点。

我无法找到任何帮助的一件奇怪的事情是显示 Touch ID 视图时(在我的情况下用于登录应用程序)。 VoiceOver 将 ID 发音为单词而不是 I.D。

我已经尝试为 NSString 和 LAContext 对象实现可访问性属性,但似乎都没有改变 VoiceOver 读出的内容。下面的代码片段:

LAContext *context = [[LAContext alloc] init];
[context setIsAccessibilityElement:YES];
[context setAccessibilityLabel:@"TEST 2"];

NSError *error = nil;

NSString *label = @"Please authenticate your ID using the Touch ID";
[label setIsAccessibilityElement:YES];
[label setAccessibilityTraits:UIAccessibilityTraitStaticText];
[label setAccessibilityLabel:@"TEST"];

showingTouchID = TRUE;

if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
            localizedReason:label
                      reply:^(BOOL success, NSError *error) {
......

带有或不带有具有辅助功能属性的上下文的 VoiceOver 的输出始终是标签文本。

非常感谢所有帮助:)

您可以试试这个来快速解决问题:只需在 I 和 D

之间输入 space
  NSString *label = @"Please authenticate your ID using the Touch ID";
  label.accessibilityLabel=@"Please authenticate your I D using the Touch I D";

另请注意,您只能为 UIElements 设置辅助功能,不能将其设置为通用变量。为 LAContext 和 NSString 设置可访问性标签没有意​​义。

您需要将可访问性标签设置为 UILabel 或您为其赋予 NSString 的元素。

绝对不要为了让 VoiceOver 正确发音而更改辅助功能标签(即不要尝试 "hack" 标签发音)。原因是 VoiceOver 不只有语音输出;它还具有盲文输出,盲人用户希望在这些内容中按照书写的内容逐字逐句地阅读(即准确地看到所有空格、capital/small 字母等)。写 "I D" 而不是 "ID",然后虽然 VoiceOver 可能会正确发音(在 iOS 的特定版本中),但盲人用户也在盲文显示器上阅读了 "I D"可能会认为它实际上是这样写的,让我们说非专业人士,然后他们会在与其他人的书面交流中使用这个错误的拼写。

正确的处理方法是:

  1. 向 Apple 提交有关特定语言中特定单词和特定语音发音的错误(例如 "Expected pronounciation: [aj'di:]" 与 "Actual pronounciation: [id]")
  2. 向 Apple 提交错误以请求仅自定义发音的能力(即,您将在何处保持可访问性标签完整且正确,但向语音指定它应该如何发音文本的特定部分),以及这在哪里可以通过翻译字符串的译员为每种语言单独完成定制(因为错误的发音是特定于语言的)——另见下一点。
  3. 如果可以改写,请尝试使用与有问题的单词不同的单词(这似乎不适用于 "Touch ID" 是固定术语的情况)。但这也是一个 hack,因为它只解决了英文原件,而不关心翻译,因为改写可能反而会使发音复杂化。

抱歉这个坏消息。

最后,在这里,在 iOS 8.4.1 和 iOS 9.0.2 上,VoiceOver 使用默认的美国英语 iOS 语音,至少在这个网页上,发音 "ID" 在 "Touch ID" 中作为 [ajdi:],而不是 [id]。

从iOS11开始,可以设置元素的accessibilityAttributedLabel,使用UIAccessibilitySpeechAttributeIPANotation键(Swift:NSAttributedString.Key.accessibilitySpeechIPANotation)指定读音对于一系列属性字符串。

请参阅 "Speech Attributes for Attributed Strings" 了解可用于调整 VoiceOver 朗读文本方式的其他工具。