【发布时间】: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