苹果的语音提示在UINavigation Controller中的一个视图中错误发音了标题。
在应用程序的其他部分中,我已经添加了自定义可访问标签,以帮助它正确发音公司名称。如何设置UINavigationBar的可访问性标签?
苹果的语音提示在UINavigation Controller中的一个视图中错误发音了标题。
在应用程序的其他部分中,我已经添加了自定义可访问标签,以帮助它正确发音公司名称。如何设置UINavigationBar的可访问性标签?
这适用于iOS 8.2。在viewDidLoad
中:
self.navigationItem.accessibilityLabel = @"My accessible label";
当导航控制器转换到视图控制器时,会读取 accessibilityLabel
而不是视图控制器的 title
。
我无法添加可访问性标签,但我找到了一个解决方法:
我将navigationItem的标题视图替换为设置有可访问性的UILabel。
UILabel *titleLabel = [[UILabel alloc] init];
titleLabel.text = @"myTitle";
[titleLabel setAccessibilityLabel:@"myCustomAccessiblityLabel"];
[titleLabel setFont:[UIFont boldSystemFontOfSize:20.0]];
[titleLabel setBackgroundColor:[UIColor clearColor]];
[titleLabel setTextColor:[UIColor whiteColor]];
[titleLabel sizeToFit];
self.navigationItem.titleView = titleLabel;
我不确定为什么设置辅助功能标签无法正常工作,但上述代码满足我的需求。
由于UINavigationBar
继承自UIView
,因此您应该能够设置其accessibilityLabel
属性。尝试:yourUINavigationBar.accessibilityLabel = @"title";
。
此外,您可能需要确保它被标记为可访问元素,使用yourUINavigationBar.isAccessibilityElement = YES;
(并且不在另一个也被标记为可访问元素的视图内)。 (我猜测最后一部分可能是问题所在,因为您似乎已经知道了可访问性标签。您可以在模拟器中使用辅助功能检查器来查看是否存在这种情况,方法是在点击元素时查看其周围的框是否比导航栏更大。)
UINavigationItem
对象的titleView
属性执行此操作。(顺便说一句,这似乎类似于我以前在可访问性UIBarButtonItem
方面遇到的问题,它不像“正常”的UIView相关内容那样运作。) - Turixself.navigationItem.title = @"我的标题";
[self.navigationItem.titleView setIsAccessibilityElement:YES];
[self.navigationItem.titleView setAccessibilityLabel:@"辅助功能标题"];
放在loadView里面。 - Robert Wagstaff有一种相似的解决方法,我已经在 iOS 11 和 12 上进行了测试,可以按预期工作。对于 navigationItem.titleView
,设置一个 UILabel
对象,然后为 navigationItem.titleView
设置您的可访问性标识符。
self.navigationItem.titleView = YOUR_CUSTOM_UILABEL;
accessibilityIdentifier 部分
self.navigationItem.titleView.accessibilityIdentifier = YOUR_ACCESSIBILITY_IDENTIFIER;
你可以使用Xcode的辅助功能检查器来查看你的标识符。
titleView
上设置accessibilityLabel
。如果你的titleView
里面有一个UILabel
,你也可以尝试在它上面设置accessibilityLabel
。 - stevekohlsself.navigationItem.accessibilityIdentifier
。为什么会这样? - Chris PrinceUINavigationItem
继承自NSObject
。在NSObject
上有一个类别UIAccessibility
,它提供了accessibilityLabel
。请参见UIKit/Headers/UIAccessibility.h
。 - stevekohls