我正在尝试实现一项功能,该功能将使用VoiceOver读取WKWebView
中显示的选定HTML片段。
我的初步尝试将html压平为文本,然后使用AVSpeechSynthesizer()
来读取用文本实例化的AVSpeechUtterance
:
let synth = AVSpeechSynthesizer()
let utterance = AVSpeechUtterance(string: myFlattenedText)
if synth.isSpeaking {
synth.stopSpeaking(at: .immediate)
}
synth.speak(utterance)
这通常有效,但VoiceOver提供的体验更胜一筹。例如,我的HTML启用了辅助功能MathJax。 VoiceOver在阅读上下文数学方程式方面做得很好,而将html展平为文本的策略却没有。
我尝试使用html片段创建NSAttributedString
详细here,但这没有做得更好。
有没有办法利用VoiceOver功能,或许以某种方式使用UIAccessibility
,它将以与VoiceOver相同的方式读取启用辅助功能的HTML?
答案 0 :(得分:0)
您所看到的是WebKit的MathJax
支持与精心考虑的UIAccessibility
支持配对。虽然我发现的最新文档表明these properties are not accessible to web developers,作为iOS开发人员,您应该能够遍历UIAccessibility
元素层次结构以转储您的accessibilityLabel
和accessibilityValue
MathJax
内容。
编辑:正如@mattsven指出的那样,问题是WKWebView内容是在远程进程中呈现的,因此不会将其可访问性元素暴露给包含的应用程序。