除了它的一些 subview 之外,我用来将整个 UIView 视为可访问元素的一般策略是使用 UIView 的 contentView 作为可访问元素来代替 UIView 本身。例如,
isAccessibilityElement = false
contentView.isAccessibilityElement = true
contentView.accessibilityLabel = "super view"
subview1.accessibilityLabel = "subview1"
subview2.accessibilityLabel = "subview2"
accessibilityElements = [contentView, subview1! subview2]
这在大多数情况下运行良好,但当 View 为 UITableViewCell 时会产生问题。基本上,如果 isAccessibilityElement = true
那么当 VoiceOver 用户在单元格中轻拂,并且屏幕上最低的可见单元格处于焦点时,tableView 将自动滚动到下一个单元格。但是如果单元格本身是一个无障碍元素,它就不能有同样是无障碍元素的 subview 。
另一方面,如果 isAccessibilityElement = false
自动滚动变得不稳定,通常焦点会从最低的可见单元格跳到 tableView 下方的滚动条或辅助功能元素。它似乎取决于屏幕尺寸,因为它会随着焦点在某些设备上的变化而自动滚动。
我尝试过以编程方式滚动 tableView 以响应单元格中的焦点变化,但这似乎也会导致不稳定的焦点跳跃。
有没有办法确保 VoiceOver 在 UITableView 中滚动干净,同时允许单元格和这些单元格的 subview 被视为可访问性元素?
最佳答案
在我确定我设置的 accessibilityElements 之一没有被隐藏之前,我遇到了这些问题并且更糟。该元素是最左边的项目(尽管作为信息按钮,我对元素进行了排序,以便它位于主单元格标题标签之后)。
不保证它会为其他任何人修复它,但绝对值得在没有隐藏任何可访问性项目的情况下进行测试。
关于ios - VoiceOver 在 UITableView 中滚动,其中单元格和 subview 都是可访问性元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62600499/