我正在使用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]);
}
这对于实际聚焦于单元格非常合适,但VoiceOver部分完全被忽略,通知根本不会将焦点移动到正确的单元格,它始终是第一个单元格中的第一个元素。
另外需要注意的是,单元格本身不是accessibilityElements,不应该是,它们实现了UIAccessibilityContainer
协议,因此每个单元格的标题标签都是我希望焦点结束的地方。“ / p>
答案 0 :(得分:0)
这是iOS中的一个错误,现在已修复。
我开始在iOS8中看到这个错误。并于2014年11月6日向Apple报告了一个错误。 已在iOS 9.3.2中修复。
如果您受影响的操作系统版本,您无法做任何开发人员。建议您的应用用户更新操作系统。