VoiceOver焦点将UICollectionView重置为第一个条目?

Luk*_*uke 20 accessibility objective-c ios voiceover uicollectionview

我正在使用VoiceOver,并且遇到了问题UICollectionView.我有一个带有十个按钮的初始屏幕,每个按钮链接到集合视图中的十个单元格之一.集合视图实际上是屏幕的完整大小,每个单元格都包含一个子视图控制器.这一切都可以在VoiceOver关闭时正常工作,但是当它打开时,激活集合中间的一个按钮总是会导致集合视图弹出到其第一个单元格,即使我没有点击第一个按钮.我认为这是因为VoiceOver"焦点"转到它看到的第一个元素(即第一个单元格).

我已尝试使用UIAccessibilityScreenChangedNotification和使用相同单元格的参数的布局相同,但它没有任何区别,它没有弹出我的必需元素,并且总是弹出到集合中的第一个单元格.

我在这里做错了什么?

我正在添加一个片段,这个被调用viewDidLayoutSubviews,如果VoiceOver关闭,它可以正常滚动.但是一旦VO开启,它就会中断.

if (self.initialIndexPath) {
    [self.collectionView scrollToItemAtIndexPath:self.initialIndexPath atScrollPosition:UICollectionViewScrollPositionNone animated:NO];
    UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, [self.collectionView cellForItemAtIndexPath:self.initialIndexPath]);
}
Run Code Online (Sandbox Code Playgroud)

这对于实际聚焦于单元格非常合适,但VoiceOver部分完全被忽略,通知根本不会将焦点转移到正确的单元格,它始终是第一个单元格中的第一个元素.

还要注意,单元格本身不是accessibilityElements,不应该是,它们实现UIAccessibilityContainer协议,因此每个单元格的标题标签将是我希望焦点最终的位置.

Jur*_*tas 1

这是 iOS 中的一个错误,现已修复。

我在 iOS8 中开始看到这个错误。并于 2014 年 11 月 6 日向 Apple 报告了一个错误。已在 iOS 9.3.2 中修复。

如果您使用的是受影响的操作系统版本,那么作为开发人员您将无能为力。建议您的应用用户更新操作系统。