菜鸟教程小白 发表于 2022-12-13 02:26:42

ios - UICollectionViewFlowLayout Voice Over 使用 Flow Layout 乱序读取项目


                                            <p><p><em>我有两个关于可访问性和 UICollectionViews 的问题,希望得到专家的帮助。另一个关于节标题的问题可以在 <a href="https://stackoverflow.com/questions/16289412/uicollectionview-section-headers-as-accessibility-headers" rel="noreferrer noopener nofollow">here</a> 中找到。 .我创建了一个 <a href="https://github.com/jose-ibanez/CollectionViewAccessibility" rel="noreferrer noopener nofollow">sample project</a>证明这两个问题。</em></p>

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

<p>你可以拉这个<a href="https://github.com/jose-ibanez/CollectionViewAccessibility" rel="noreferrer noopener nofollow">example project</a> ,运行它,启用画外音,然后轻扫项目以查看问题。它会创建具有随机高度的单元格,因此很可能会乱序读取单元格。</p>

<p><strong>有没有一种方法可以让 Collection View 按顺序浏览项目?</strong>我觉得这是唯一有意义的方法,但我找不到强制执行该行为的方法.将 Collection View 设置为对 subview 进行分组似乎没有帮助。任何帮助将不胜感激。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>取自 <a href="https://stackoverflow.com/questions/13132805/accessibility-for-ios-voiceover-read-order-issue" rel="noreferrer noopener nofollow">Accessibility for iOS, VoiceOver read order issue</a> </p>

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

<pre><code>-(BOOL)shouldGroupAccessibilityChildren{
   return YES;
}
</code></pre>

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

<pre><code> -(BOOL)isAccessibilityElement{
   return NO;
}
-(NSInteger)accessibilityElementCount{
       return self.subviews.count;
}
-(id)accessibilityElementAtIndex:(NSInteger)index{
      return ;
}
-(NSInteger)indexOfAccessibilityElement:(id)element{
      return ;
}
</code></pre>

<p>我已经测试了这个示例代码,它可以满足您的需求,如果您需要任何说明,请添加评论。总是乐于帮助使事情变得更容易获得。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UICollectionViewFlowLayout Voice Over 使用 Flow Layout 乱序读取项目,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/16289496/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/16289496/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UICollectionViewFlowLayout Voice Over 使用 Flow Layout 乱序读取项目