【问题标题】:How to prevent automatic scrolling of UICollectionView by VoiceOver?如何防止 VoiceOver 自动滚动 UICollectionView?
【发布时间】:2020-09-20 21:36:42
【问题描述】:

我有一个水平滚动的 UICollectionView,上面有一个标题标签,下面有一个 UIPageControl。

UILabel
UICollectionView
UIPageControl

当我打开 VoiceOver 辅助功能并开始按顺序遍历屏幕时,集合视图会自动滚动到开头或结尾。使页面突然跳出。例如,如果我使用页面控件滚动到第二页,然后返回到集合视图,它会意外显示并读取最后一页。由于我在无障碍模式下使用页面控件进行导航,因此我想阻止自动滚动。

我该如何预防或应对这种情况?

我发现了一个似乎描述相同问题的问题,但没有解决方法建议:iOS 8.4: Scroll view resets contentOffset with Voice Over enabled shortly after view appear

我在 iOS 13.4.1 iPhone 11 Pro 上遇到过

【问题讨论】:

    标签: ios uicollectionview uiscrollview accessibility voiceover


    【解决方案1】:

    UIScrollViewDelegate.scrollViewDidScroll(_:)

    触发自动滚动的可访问性焦点的更改也会触发对 UIScrollViewDelegate 中scrollViewDidScroll(_:) 的调用。用它来对抗自动滚动效果,f.i.以您喜欢的方式设置contentOffset

    您可能需要检测滚动实际上是由辅助功能触发的,而不是用户拖动或捏合。 UIAccessibility.isVoiceOverRunningUIAccessibilityFocus.accessibilityElementDidBecomeFocused() 是你的朋友。请注意,更改 contentOffset(或 zoomScale 或任何需要的内容)可能会触发对 scrollViewDidScroll(_:) 的另一个调用,因此您需要防止无限递归。

    【讨论】:

    • 谢谢。我想我明白了,并且可以从中构建一些东西。我希望UIAccessibilityFocus.accessibilityElementDidBecomeFocused()scrollViewDidScroll(_:) 的顺序能让我正确检测到自动辅助功能滚动。如果我再次回到这个问题,我会尝试。谢谢你的回答。
    • @ŠimonKručinin 你顺利通过了吗?请指导我。我面临同样的问题。当我在使用 pagecontrol 的任何中间单元格上并且当我滑动到集合视图时,它会重置到第零位。这很烦人!请帮忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多