установкиUICollectionView пейджинговой перерывы после 2^24 пикселей
У меня есть UICollectionView
, что позволяет пользователю пролистать снимки, 12 на страницу. Есть более 200 000 изображений, которые должны быть доступны в приложении. Я не ожидаю, что пользователь перейдет на страницу 20 000, так что есть функция для перехода на определенную страницу.
Проблема
В альбомной ориентации, пейджинг срывается на странице 16,385. Коллекция больше не настраивается на границу страницы. Если вы вернетесь до страницы 16,384, вы можете заставить его снова начать работать, но ни одна страница за 16,385 не работает.
Мой делегат также прекращает получать сообщение scrollViewDidEndDecelerating:
, когда появляется ошибка.
Гипотеза
Страница 16385 в альбомной ориентации происходит, чтобы начать на пиксель 16,777,216 который бывает 2^24. Я думаю, что есть что-то в UICollectionView
или UIScrollView
, который пробивает 2^24.
Это просто недокументированный лимит? Мне повезло?
Пример
Я загрузил project, демонстрирующую проблему. Here's Соответствующий контроллер просмотра. Если вы встряхнете iPad или симулятор, вы попадете на страницу 16,384, на одну страницу, пока не появится ошибка.
Снарк
Если вы не думаете, что пользователь должен нуждаться, чтобы иметь возможность перейти на страницу 20000, это круто. Я не думаю, что это имеет отношение к вопросу.
Имейте в виду, что 'CGFloat' является 32-битным числом с плавающей запятой IEEE, поэтому у него есть только 24-битная мантисса. Поэтому в диапазоне от 2^24 до 2^25 он может хранить только кратные 2; он не может хранить какие-либо нечетные числа (например, 16 777 217). Это, безусловно, может быть связано с вашей проблемой, поскольку все координаты и размеры, связанные с просмотром, хранятся с использованием 'CGFloat'. –
@robmayoff Это звучит так, будто это может быть преступником. Я думал, что это что-то в этом роде, но не смог найти ссылку на него. –