Мой UICollectionView не заполняется никакими ячейками, когда VoiceOver включен - PullRequest
1 голос
/ 10 октября 2019

У меня возникла особая проблема с доступностью в iOS 13.

У меня есть календарь, который реализован как UICollectionView. Если VoiceOver включен, представление коллекции пусто - оно просто не заполняется никакими UICollectionViewCells.

Я переопределил правильные вызовы UICollectionViewDataSource. numberOfSections и collectionView(numberOfItemsInSection) вызываются и возвращают правильные ненулевые значения. Но collectionView(cellForItemAt) никогда не называется. Это то, что не имеет никакого смысла для меня;он знает, сколько разделов и сколько элементов у меня есть, но его не волнует вопрос об этих элементах.

Если я отключу VoiceOver, он вызовет collectionView(cellForItemAt) и заполнит представление моей коллекции. должным образом. И в iOS 12 все работает нормально, независимо от того, включен VoiceOver или нет.

Что мне не хватает, или как я могу отладить это? Как состояние VoiceOver может повлиять на заполнение представления моей коллекции?

1 Ответ

0 голосов
/ 07 ноября 2019

Мы сообщили о проблеме нашему представителю Apple и получили ответ. Происходит то, что в iOS 13 VoiceOver запрашивает в представлении коллекции информацию о большем прямоугольнике, чем видимый;это было преднамеренное изменение для поддержки определенных типов представлений коллекции, размер содержимого которых неизвестен заранее. Поэтому он вызывал наше переопределение layoutAttributesForElements(in rect:) с большими отрицательными значениями Y для прямоугольника, и у нас там не было никаких элементов.

Нашим решением было игнорировать значение Y для прямоугольника, которым мы былидано, и вместо этого используйте значение Y 0. После этого iOS удалось найти ячейки нашей коллекции.

...