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"可能会认为它实际上是这样写的,让我们说非专业人士,然后他们会在与其他人的书面交流中使用这个错误的拼写。
正确的处理方法是:
- 向 Apple 提交有关特定语言中特定单词和特定语音发音的错误(例如 "Expected pronounciation: [aj'di:]" 与 "Actual pronounciation: [id]")
- 向 Apple 提交错误以请求仅自定义发音的能力(即,您将在何处保持可访问性标签完整且正确,但向语音指定它应该如何发音文本的特定部分),以及这在哪里可以通过翻译字符串的译员为每种语言单独完成定制(因为错误的发音是特定于语言的)——另见下一点。
- 如果可以改写,请尝试使用与有问题的单词不同的单词(这似乎不适用于 "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 朗读文本方式的其他工具。
我正在努力确保我正在开发的 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"可能会认为它实际上是这样写的,让我们说非专业人士,然后他们会在与其他人的书面交流中使用这个错误的拼写。
正确的处理方法是:
- 向 Apple 提交有关特定语言中特定单词和特定语音发音的错误(例如 "Expected pronounciation: [aj'di:]" 与 "Actual pronounciation: [id]")
- 向 Apple 提交错误以请求仅自定义发音的能力(即,您将在何处保持可访问性标签完整且正确,但向语音指定它应该如何发音文本的特定部分),以及这在哪里可以通过翻译字符串的译员为每种语言单独完成定制(因为错误的发音是特定于语言的)——另见下一点。
- 如果可以改写,请尝试使用与有问题的单词不同的单词(这似乎不适用于 "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 朗读文本方式的其他工具。