UICollectionViewFlowLayout Voice Over使用Flow Layout按顺序读取项目

我有两个问题关于可访问性和UICollectionViews,我希望得到一些专家的帮助。 另一个问题,关于节标题,可以在这里find。 我已经创build了一个示例项目来演示这两个问题。

我有一个UICollectionView使用UICollectionViewFlowLayout包含可变高度的项目。 UIFlowLayout将每行的元素垂直居中。 不幸的是,当启用Voice Over时,它似乎倾向于垂直放置较高的元素,导致它无序地读取项目。

您可以拉这个示例项目 ,运行它,启用声音,并通过项目滑动看到问题。 它创build具有随机高度的单元格,所以很可能会按顺序读取单元格。

有没有一种方法可以使收集视图顺序通过项目? 我觉得这是唯一有道理的方法,但是我找不到一个强制执行的方法。 设置集合视图来分组子视图似乎没有帮助。 任何帮助将不胜感激。

取自iOS的辅助function,VoiceOver读取顺序问题

实现这个例子的最快方法是将三个标签放在一个透明的UIView子类中,作为标签的容器。 这个子类必须正确设置,让VoiceOver知道如何解释它。 如果您的部署目标是iOS6,那么您可以简单地回答此子类中的“应该组可访问性子项”问题。

 -(BOOL)shouldGroupAccessibilityChildren{ return YES; } 

对于下面的iOS6,这将是更复杂的,除了你的UIView容器子类将只包含可访问性元素的UILabels。 你可以像这样实现它:

  -(BOOL)isAccessibilityElement{ return NO; } -(NSInteger)accessibilityElementCount{ return self.subviews.count; } -(id)accessibilityElementAtIndex:(NSInteger)index{ return [self.subviews objectAtIndex:index]; } -(NSInteger)indexOfAccessibilityElement:(id)element{ return [self.subviews indexOfObject:element]; } 

我已经testing了这个示例代码,它是做你正在寻找的,如果你需要任何澄清,请添加评论。 总是乐于帮助使事情更容易访问。