UILabel的accessibilityAttributedLabel在口述内容及无障碍检查器失效
问题成因
- 三类功能的属性适配逻辑不同:
accessibilitySpeechLanguage是 VoiceOver专属的富文本无障碍属性,苹果在设计该属性之初就仅适配了VoiceOver的朗读引擎,其余两类工具不会主动读取该属性。 - Xcode Accessibility Inspector功能限制:该工具目前仅支持读取基础的
accessibilityLabel纯文本值,不会解析accessibilityAttributedLabel内的自定义无障碍属性,属于工具本身的适配覆盖不全,暂时不支持校验这类富文本无障碍配置。 - iOS 朗读内容(Spoken Content,含选中朗读、全屏朗读)的设计逻辑不同:该功能的定位是面向普通用户的通用文本朗读工具,默认会走系统全局文本语言检测逻辑,仅会读取普通富文本的
language属性,不会识别无障碍专属的accessibilitySpeechLanguage属性。
官方文档说明
苹果官方无障碍开发指南中明确标注:所有前缀为
accessibilitySpeech的NSAttributedString.Key属性,仅为VoiceOver场景设计,其余系统辅助功能默认不支持读取这类属性。
同时accessibilityAttributedLabel的官方描述也明确说明,该属性是专为VoiceOver提供的富文本标签,其他辅助功能如需使用需要单独做适配。
兼容方案(可选)
如果需要同时覆盖VoiceOver和系统朗读内容功能,可以同时给普通富文本和无障碍富文本配置对应语言属性,示例代码如下:
let commonAttributes: [NSAttributedString.Key: Any] = [ .language: "de-DE", // 适配系统朗读内容等通用朗读工具 .accessibilitySpeechLanguage: "de-DE" // 适配VoiceOver ] let attributedString = NSMutableAttributedString( string: "This is English but will be read in German", attributes: commonAttributes ) // 同时赋值普通富文本和无障碍富文本,覆盖所有朗读场景 label.attributedText = attributedString label.accessibilityAttributedLabel = attributedString
内容的提问来源于stack exchange,提问作者Philipp Otto
相关产品推荐
相关产品推荐

