我正在尝试确保我正在处理的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输出始终是标签文本。
所有帮助非常感谢:)
答案 0 :(得分:3)
您绝对不应该更改辅助功能标签,只是为了让VoiceOver正确发音(即不要尝试" hack"标签发音)。原因是VoiceOver只有语音输出;它还具有盲文输出,盲人用户希望在写入时完全逐字逐句地阅读(即完全查看所有空格,大写/小写字母等)。写"我D"而不是" ID",然后VoiceOver可能正确地发音(在特定版本的iOS中),盲人用户,在阅读" I D"在盲文显示器上可能会认为这就是它实际写入和显示的方式,当他们在与其他人的书面交流中使用这种错误的拼写时,让他们说非专业。
处理这个问题的正确方法是:
,尽管没有立即给出解决方案抱歉这个坏消息。
最后,在iOS 8.4.1和iOS 9.0.2上,VoiceOver默认使用美国英语iOS语音,至少在这个网页上发音" ID"在" Touch ID" as [ajdi:],而不是[id]。
答案 1 :(得分:1)
你可以尝试这个来快速解决:只需在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的元素。
答案 2 :(得分:0)
从iOS 11开始,您可以设置元素的accessibilityAttributedLabel
并使用ValueError: total size of new array must be unchanged
键(快速键:UIAccessibilitySpeechAttributeIPANotation
)来指定属性字符串范围的发音。
请参见"Speech Attributes for Attributed Strings",了解可用于调整VoiceOver读取文本方式的其他工具。