我最初的尝试是将html展平为文本,然后使用AVSpeechSynthesizer()读取由文本实例化的AVSpeechUtterance:
let synth = AVSpeechSynthesizer()
let utterance = AVSpeechUtterance(string: myFlattenedText)
if synth.isSpeaking {
synth.stopSpeaking(at: .immediate)
}
synth.speak(utterance) 这通常是可行的,但VoiceOver提供的体验更好。例如,我的超文本标记语言具有支持可访问性的MathJax。VoiceOver在读取上下文数学公式方面做得很好,而将html扁平为文本的策略则不是这样。
我尝试用html片段创建一个NSAttributedString,作为详细的here,但效果并不好。
有没有一种方法可以利用VoiceOver的功能,也许是使用UIAccessibility,以与VoiceOver相同的方式读取启用了可访问性的HTML?
发布于 2016-11-17 21:16:18
您看到的是WebKit的MathJax支持和经过深思熟虑的UIAccessibility支持。虽然我找到的最新文档表明,作为一名iOS开发人员,these properties are not accessible to web developers应该能够遍历UIAccessibility元素层次结构以转储MathJax内容的accessibilityLabel和accessibilityValue。
编辑:正如@mattsven指出的那样,问题在于WKWebView内容是在远程进程中呈现的,因此不会将其可访问性元素公开给包含它的应用程序。
https://stackoverflow.com/questions/40554466
复制相似问题