【问题标题】:VoiceOver Scrolling In UITableView where both cells and subviews are accessibility elementsVoiceOver 在 UITableView 中滚动,其中单元格和子视图都是可访问性元素
【发布时间】:2020-10-17 09:29:13
【问题描述】:

我用来将整个 UIView 以及它的一些子视图都视为可访问性元素的一般策略是使用 UIView 的 contentView 作为可访问性元素来代替 UIView 本身。例如,

isAccessibilityElement = false
contentView.isAccessibilityElement = true
contentView.accessibilityLabel = "super view"
subview1.accessibilityLabel = "subview1"
subview2.accessibilityLabel = "subview2"
accessibilityElements = [contentView, subview1! subview2]
   

这在大多数情况下运行良好,但当视图为 UITableViewCell 时会产生问题。基本上,如果isAccessibilityElement = true 则当 VoiceOver 用户在单元格中轻弹,并且屏幕上最低的可见单元格处于焦点时,tableView 将自动滚动到下一个单元格。但是,如果单元格本身是可访问性元素,则它不能具有也是可访问性元素的子视图。

另一方面,如果isAccessibilityElement = false 自动滚动变得不稳定,通常焦点会从最低的可见单元格跳转到滚动条或tableView 下方的辅助功能元素。它似乎取决于屏幕尺寸,因为它会在某些设备上随焦点变化而自动滚动。

我已经尝试以编程方式滚动 tableView 以响应单元格中的焦点变化,但这似乎也会导致不稳定的焦点跳转。

是否有办法确保 UITableView 中的 VoiceOver 滚动干净,同时允许将这些单元格的单元格和子视图视为可访问性元素?

【问题讨论】:

  • 我也发生了非常相似的事情,尽管我没有将我的 contentView 设置为 isAccessibilityElement = true。我只是将单元格设置为 isAccessibility=false,然后设置单元格的 accessElements = [ordered subviews]。这太疯狂了,我无法理解其他人怎么没有这个问题。
  • 我的行为非常相似,在底部滚动有时有效,有时无效,并且在使用 VoiceOver 超出第一页(手动滚动后)时会出现一些奇怪的跳跃,例如这个问题:@987654321 @

标签: ios swift uitableview voiceover uiaccessibility


【解决方案1】:

您可以设置tableViewCell.accessibilityElements = [view1, view2]

【讨论】:

  • 问题已经表明他们正在设置accessibilityElements = [contentView,subview1! subview2] 在表格视图单元格上。
  • 当然,这是不正确的。我的回答应该可以,如果不行请再次评论
  • 它对我不起作用。无论是从可访问性元素中包含还是排除 contentView,画外音仍然会以疯狂的顺序读取我的表格单元格。
  • 如果是这样,您可以在单元格上公开自定义操作作为解决方法(这样的自定义操作会有意义)
【解决方案2】:

我遇到了这些问题并且更糟,直到我确定我设置的一个可访问性元素没有被隐藏。该元素是最左边的项目(尽管作为信息按钮,我对元素进行了排序,使其位于主单元格标题标签之后)。

不保证它会为其他任何人修复它,但绝对值得在没有隐藏任何可访问性项目的情况下进行测试。

【讨论】:

    最近更新 更多