我在 iOS 13 中遇到了一个关于辅助功能的特殊问题。
我有一个作为 UICollectionView 实现的日历。如果打开 VoiceOver,则 Collection View 为空 - 它根本不会填充任何 UICollectionViewCell。
我已经覆盖了正确的 UICollectionViewDataSource 调用。 numberOfSections
和 collectionView(numberOfItemsInSection)
被调用,并返回正确的非零值。但是 collectionView(cellForItemAt)
从未被调用。那对我来说没有任何意义;它知道我有多少个部分和多少项,但它不关心询问这些项。
如果我关闭 VoiceOver,它将调用 collectionView(cellForItemAt)
并正确填充我的 Collection View 。在 iOS 12 中,无论 VoiceOver 是否开启,一切正常。
我错过了什么,或者我该如何调试它? VoiceOver 的状态如何影响我的 Collection View 是否被填充?
最佳答案
我们向我们的 Apple 代表报告了该问题并得到了回复。发生的事情是,在 iOS 13 中,VoiceOver 向 Collection View 询问有关比可见的更大矩形的信息;这是一项有意的更改,以支持某些类型的 Collection View ,其内容大小事先未知。所以它调用了我们对 layoutAttributesForElements(in rect:)
的重写,其中矩形的 Y 值很大,我们没有任何元素。
我们的解决方法是忽略给定矩形的 Y 值,而是使用 0
的 Y 值。然后 iOS 能够找到我们的 Collection View 单元格。
关于ios - 当 VoiceOver 打开时,我的 UICollectionView 没有填充任何单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58330806/