Ios 触摸ID的画外音辅助标签

Ios 触摸ID的画外音辅助标签,ios,objective-c,voiceover,uiaccessibility,touch-id,Ios,Objective C,Voiceover,Uiaccessibility,Touch Id,我正在努力确保我正在使用的iOS应用程序是可访问的,并且正在尝试实施VoiceOver以确保这一点 我找不到任何帮助的一件奇怪的事情是,当触摸ID视图显示时(在我登录应用程序的情况下)。画外音把ID作为一个词来发音,而不是ID 我已经尝试实现NSString和LAContext对象的可访问性属性,但这两个属性似乎都没有改变VoiceOver读取的内容。下面是代码片段: LAContext *context = [[LAContext alloc] init]; [context setIsAcc

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

我找不到任何帮助的一件奇怪的事情是,当触摸ID视图显示时(在我登录应用程序的情况下)。画外音把ID作为一个词来发音,而不是ID

我已经尝试实现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之间留出空间

  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指定给的元素。

您绝对不应该仅仅为了使画外音发音正确而更改辅助功能标签(即,不要尝试“破解”标签发音)。原因是画外音并不仅仅有语音输出;它还具有盲文输出,盲人用户希望在书写时准确地逐字阅读(即准确地看到所有空格、大写字母/小写字母等),如果您确实这样做了,例如写了“ID”而不是“ID”,那么VoiceOver可能会正确地发音(在特定版本的iOS中),盲人用户在阅读“ID”之后在布莱叶盲文展示上,他们可能会认为这就是它的实际书写方式,比如说,在与其他人的书面交流中,他们会使用这种错误的拼写

正确的解决方法是(尽管没有立即给出解决方案):

  • 向Apple提交一个关于特定语言中特定语音的特定单词发音的bug(例如,“预期发音:[aj'di:]”与“实际发音:[id]”)
  • 向Apple提交一个bug,请求仅定制发音的功能(即,在哪里您可以保持可访问性标签完整且正确,但向语音指定它应该如何发音文本的某些部分),以及在哪里可以由翻译字符串的译员对每种语言单独进行定制(因为错误的发音是语言特有的)-也请看下一点
  • 如果你能改写,试着用不同于有问题的单词(这似乎不适用于“Touch-ID”这一固定术语)。但这也是一种技巧,因为它只解决英文原文,而不关心翻译,因为改写可能相反地使发音复杂化
  • 为这个坏消息感到抱歉


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

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


    请参阅其他可用于调整VoiceOver如何读取文本的工具。

    谢谢T先生。这里的问题似乎是LAContext处理向用户显示触摸ID提示的问题,因此我唯一可以自定义的是localizedReason。这是一个NSString,不能是任何其他内容。这就是我尝试添加accessibili的原因正如@boris所说,这似乎是发音上的一个缺陷,所以我将向苹果公司提交一份错误报告。