我正在努力确保我正在处理的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的输出始终是标签文本 .
所有帮助非常感谢:)
2 回答
你绝对不应该改变可访问性标签,只是为了让VoiceOver正确发音(即不要试图“破解”标签发音) . 原因是VoiceOver只有语音输出;它还具有盲文输出,盲人用户希望在写入时完全逐字逐句地阅读(即完全查看所有空格,大写/小写字母等) . 写“ID”而不是“ID”,然后VoiceOver可能正确地发音(在iOS的特定版本中),盲人用户,在盲文显示器上读“ID”之后可能会认为这就是它实际写的方式当他们在与其他人的书面交流中使用这种错误的拼写时,让我们说非专业 .
处理此问题的正确方法是:尽管没有立即给出解决方案,但是:
向Apple提交有关特定单词与特定语言的特定语音的发音的错误(例如"Expected pronounciation: [aj'di:]"与"Actual pronounciation: [id]")
向Apple提交一个错误请求只能自定义发音(即,您可以将辅助功能标签保持完整和正确,但指定语音应该如何发出文本的某些部分),以及可以进行此自定义的位置译者翻译字符串的每种语言(因为错误的发音是语言特定的) - 也见下一点 .
如果你可以改写,尝试使用不同于有问题的单词(这似乎不适用于"Touch ID"这是一个设定的术语) . 但这也是一个黑客攻击,因为它只解决了英文原文,而不关心翻译可能相反可能使发音复杂化的翻译 .
关于这些坏消息我很遗憾 .
最后,在这里,在iOS 8.4.1和iOS 9.0.2上,具有默认美国英语iOS语音的VoiceOver,至少在此网页上,在“Touch ID”中将“ID”发音为[ajdi:],而不是[id] .
你可以尝试这个来快速解决:只需在I和D之间留出空间
另请注意,您只能设置UIElements的辅助功能,并且无法将其设置为常规变量 . 为LAContext和NSString设置可访问性标签没有意义 .
你需要将可访问性标签设置为UILabel或你给NSString的元素 .