【问题标题】:VoiceOver accessibility label for Touch IDTouch ID 的 VoiceOver 辅助功能标签
【发布时间】:2015-10-14 19:01:10
【问题描述】:

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

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

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

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 的输出始终是标签文本。

非常感谢所有帮助:)

【问题讨论】:

    标签: ios objective-c voiceover uiaccessibility touch-id


    【解决方案1】:

    您绝对不应该为了让 VoiceOver 正确发音而更改辅助功能标签(即不要尝试“破解”标签发音)。原因是 VoiceOver 不只有语音输出;它还具有盲文输出,盲人用户希望在书写时准确地逐个字母地阅读内容(即准确地看到所有的空格、大写/小写字母等)。写“ID”而不是“ID”,然后虽然 VoiceOver 可能会正确发音(在特定版本的 iOS 中),但盲人用户在盲文显示器上读过“ID”后可能会认为它实际上是这样写的当他们在与其他人的书面交流中使用这种错误的拼写时,让我们以非专业人士的名义出现。

    处理这个问题的正确方法是:

    1. 向 Apple 提交有关使用特定语言以特定语音发音特定单词的错误(例如,“预期发音:[aj'di:]”与“实际发音:[id]”)
    2. 向 Apple 提交错误,请求仅自定义发音的功能(即,您可以保留无障碍标签完整和正确的位置,但指定语音应如何发音文本的某些部分),以及此自定义可以在哪些位置由翻译字符串的翻译人员单独为每种语言完成(因为错误的发音是特定于语言的) - 另请参阅下一点。
    3. 如果您可以改写单词,请尝试与有问题的单词不同的单词(这似乎不适用于“Touch ID”,这是一个固定术语)。但这也是一个 hack,因为它只解决了英文原版,而不关心翻译,因为改写反而可能使发音复杂化。

    很抱歉带来坏消息。

    最后,在 iOS 8.4.1 和 iOS 9.0.2 上,带有默认美国英语 iOS 语音的 VoiceOver,至少在这个网页上,将“Touch ID”中的“ID”发音为 [ajdi:],而不是 [ id]。

    【讨论】:

      【解决方案2】:

      您可以尝试这个快速解决方法:只需在 I 和 D 之间留出空间

        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 赋予的元素。

      【讨论】:

      • 谢谢T先生。这里的问题似乎是 LAContext 处理向用户呈现 Touch ID 提示,所以我唯一可以自定义的是 localizedReason。这是一个 NSString,不能是其他任何东西。这就是我尝试为其添加可访问性标签的原因。正如@boris 建议的那样,这似乎是发音方面的缺陷,所以我将向 Apple 提出错误报告。
      【解决方案3】:

      从 iOS 11 开始,您可以设置元素的 accessibilityAttributedLabel 并使用 UIAccessibilitySpeechAttributeIPANotation 键(Swift:NSAttributedString.Key.accessibilitySpeechIPANotation)指定属性字符串范围的发音。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-10
        • 1970-01-01
        • 2021-05-15
        • 1970-01-01
        相关资源
        最近更新 更多