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

Posted

技术标签:

【中文标题】如何为 tableview 上的 webview 内容启用 VoiceOver【英文标题】:How can I enable VoiceOver for webview content on tableview 【发布时间】:2017-11-16 08:11:22 【问题描述】:

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

然而,当我在UITableViewCell 上添加WKWebView 并显示在UITableVIew 中时,VoiceOver 无法识别。

根据苹果的tableview文档,为了让UITableViewCell上的每个内容分别被VoiceOver识别, 需要将单元格的isAccessibilityElement设置为false,将要识别的视图isAccessibilityElement设置为true。

但如果isAccesibilityElement ofWKWebView 设置为true,则视图本身是焦点,我们无法识别内部网络内容。

另外,当VoiceOver 在加载网页内容后第一次启用时,它会执行奇怪的行为,可以识别网页内容。

怀疑是VoiceOver内容识别定时的问题,我试运行

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil)

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil)

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

有没有一种很好的方法来处理wkwebviewtableViewVoiceOver 上的内容?

【问题讨论】:

是否为 UITableViewCell 和 WKWebview 启用了可访问性?您可能需要设置 yourTableView.isAccessibilityElement = true yourWebView.isAccessibilityElement = true 不,不是。我参考this document 并为单元格设置isAccessibilityElement = false,以便为单元格中的各个元素设置可访问性。此外,如果 WKWebView 的 isAccessibilityElement 设置为 true,则 WebView 本身将获得焦点,而不是 Web 内容本身。这是一个不受欢迎的结果。 顺便说一下,我尝试将单元格和webview的isAccessibilityElement设置为true,但没有按预期工作。 【参考方案1】:

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

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

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

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

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

【讨论】:

感谢您的回复。我刚遇到类似问题,您的回答很有帮助。 这很有帮助。谢谢!

以上是关于如何为 tableview 上的 webview 内容启用 VoiceOver的主要内容,如果未能解决你的问题,请参考以下文章

加载 WebView 页面时如何为警报对话框设置不同的标题?

如何为 UIPageViewController 中的所有 webViews 文本字体启用缩放

如何为已添加在 UIViewController 之上的 tableView 添加自定义单元格?

Cocoa - 如何为 tableView 创建搜索字段?

如何为 tableview 单元格执行放大、缩小动画?

如何为 TableView 的 TableViewCell 设置填充/边距和角半径?