如何使 UITableView 与大标题 VoiceOver 兼容?

Posted

技术标签:

【中文标题】如何使 UITableView 与大标题 VoiceOver 兼容?【英文标题】:How can I make a UITableView with big header VoiceOver compatible? 【发布时间】:2016-09-20 21:21:10 【问题描述】:

我的应用程序有一个表格视图,其中有一个大的空白 tableHeaderView 允许将可见单元格完全滚动到窗口之外(到底部)。 所以 0,0 的 contentOffset 意味着内容被滚动出窗口。初始 contentOffset 为 0,height of tableView。

这一切都很好,但我在为其启用可访问性时遇到了一个难题。

用户逐步浏览元素,从导航栏及其栏按钮开始。只要她再次滑动以激活表格视图的第一个单元格,表格视图就会自动滚动到 0,0。但是,由于第一个单元格在此 contentOffset 处不可见,因此无法聚焦在它上面,而是将焦点保持在最后一个选定的元素上。

我可以以某种方式阻止这种情况或手动控制 VO 模式下的 contentOffset 吗?

我创建了一个demo project 来显示我的问题。

【问题讨论】:

您管理解决方案了吗?类似的问题,当表格视图之后的元素处于焦点时,表格视图中的单元格被向下拖动。只有打开画外音才会发生这种情况 【参考方案1】:

如果空标头中没有可访问的内容,请考虑在加载时以编程方式设置内容偏移量,以防出现UIAccessibilityIsVoiceOverRunning()。您还需要监控 UIAccessibilityVoiceOverStatusChanged 并执行相同操作。

【讨论】:

我确实在加载时设置了 contentOffset。但是,当 VoiceOver “选项卡”到表格视图时,系统会自动更改 contentOffset - 以错误的方式。我不知道有任何事件或钩子可以检测到 VO 切换到新元素,同样我也无法轻松区分正确的 VO 滚动事件和不正确的事件。 假设您可以使用UIAccessibilityFocus 非正式协议来检测转换。

以上是关于如何使 UITableView 与大标题 VoiceOver 兼容?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 UITableView 的部分标题完全透明

如何使 UITableView 水平和垂直滚动

如何使uitableview的最后一行填充空白

如何使UITableview中的DPFBannerView不滚动

如何使 UITableView 内容围绕中心点滚动

如何在 Swift 3 中使这个 UITableView 清晰(透明)