如何为 tableview 上的 webview 内容启用 VoiceOver

mrq*_*335 5 accessibility ios voiceover uiaccessibility swift

通常,VoiceOver正确读取加载的网页内容,WKWebView并且可以读取按钮和链接。

但是,?当我说WKWebViewUITableViewCell,并显示在UITableVIewVoiceOver无法识别它。

根据苹果的tableview文档,为了让每个内容都分别UITableViewCell被识别VoiceOver,需要将isAccessibilityElementcell设置为false isAccessibilityElement,view设置为true。

但如果isAccesibilityElementofWKWebView设置为 true,视图本身是聚焦的,我们无法识别内部网页内容。

此外,VoiceOver在加载 Web 内容后第一次启用时,它执行了可以识别 Web 内容的奇怪行为。

怀疑是VoiceOver内容识别时序的问题,我试了一下运行

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil)
Run Code Online (Sandbox Code Playgroud)

或者

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil)
Run Code Online (Sandbox Code Playgroud)

加载网页内容后,却没有得到好的结果。

是否有处理内容的一个好办法wkwebviewtableViewVoiceOver

Chr*_*sCM 4

因此,我将解释您所看到的行为。本质上,VoiceOver 将仅关注树中的第一个辅助功能元素。因此,作为可访问性元素的任何视图都不会使其作为可访问性元素的子视图成为焦点。

至于你的情况,我很好奇你的情况。我发现您可能需要提供更多详细信息。当我绘制一个表格视图时,我会在一个视图中绘制多个 WKWebView,这确实很奇怪。

Web 视图的典型标记是不将任何内容设置为可访问性元素,并让 WebView 确定其中哪些元素可访问。WKWebView 应该负责将 HTML 内容报告为适合您的本机可访问性元素。做任何其他事情都会破坏 WKWebView 的目的。但是,如果您在一个应用程序中有多个 Web 视图,这可能会使事情变得混乱。最终,如果它不能按照我概述的方式工作(只需保留所有内容,并将所有内容标记为“不是”可访问性元素),这将是一个错误,但您必须处理这个错误。

然后,解决方案将覆盖您的 webview 的 UIAccessibilityContainer 协议,并为其提供自定义反馈。不理想,会很痛苦。更多细节会有所帮助,但至少现在您可以更多地了解正在发生的事情。

另一个简单的解决方案是,如果您的 webview 中的内容非常简单,您可以将accessibility元素设置为true,并通过accessibilityLabel、accessibilityValue和accessibilityTraits提供整个webview的内容描述。只要确保您掌握了所有信息,并且任何操作仍然可行!