Прокрутка UITableView/UICollectionView выглядит прерывистой после Xcode 9.0 и iOS 11

У меня есть четыре страницы в приложении для iPhone. Все 4 страницы являются подклассом UIViewController. Две страницы имеют UITableView для отображения списка элементов. Две страницы имеют UICollectionView для отображения данных. Все данные получены из веб-сервиса с помощью AFNetworking. Это приходит очень хорошо без каких-либо проблем. Я показываю пользовательские ячейки из раскадровки для tableView и collectionView со всеми необходимыми и рекомендуемыми методами.

Раньше он показывал плавную прокрутку в симуляторе и устройствах, прежде чем я обновил свой Xcode 8.3 до Xcode 9.0 и iOS 11. Я пробовал решения из это, а также другие возможные решения от SO, но не решают мою проблему. Самая запутанная часть заключается в том, что я не изменил ни одной строки кода для tableView или collectionView, и он начал показывать прерывистый эффект.

Похоже, он ждет чего-то каждую секунду и прокручивает с заметной паузой, хотя у меня нет какой-то сложной логики при отображении данных. Я просто показываю данные по мере их поступления в ответ веб-сервиса. У меня также есть старая ветка, которая раньше показывала плавную прокрутку с Xcode 8.3, но когда я запускаю тот же код с Xcode 9.0, она показывает прерывистую прокрутку.

Я использую macOS 10.12.6, Xcode 9, Swift 4 и симуляторы с iOS 11 и iOS 10.3.


person Vishal Gabani    schedule 30.10.2017    source источник
comment
Не могли бы вы показать мне область ответа, где вы перезагружаете свою таблицу?   -  person Bucket    schedule 13.11.2017
comment
Все данные предварительно загружены или вы загружаете их, пока ячейки перерабатываются? Вы пытались заполнить UITableView статическими данными и проверить, наблюдаете ли вы ту же задержку?   -  person anemo    schedule 14.11.2017
comment
Спасибо всем за ответы. Я использовал один сторонний инструмент для записи видео, и это придавало прерывистый эффект каждому прокручиваемому просмотру. Этот инструмент плохо работает с iOS 11, поэтому, как только я удалил его, все виды с прокруткой стали плавными, как и раньше.   -  person Vishal Gabani    schedule 17.11.2017


Ответы (2)


Мы нашли обходной путь для этой проблемы! Если вы просто реализуете

-[UITableView tableView:estimatedHeightForRowAtIndexPath:]

и верни свой

-[UITableView tableView:heightForRowAtIndexPath:]

все будет работать.

Обновление: оказывается, что суть проблемы заключается в том, что когда вы выделяете новый UITableView с помощью Xcode 8, значение по умолчанию для UITableView.estimatedRowHeight равно 0, тогда как когда вы делаете то же самое с Xcode 9, значение по умолчанию равно -1 или UITableViewAutomaticDimension. Установка его обратно на 0 устраняет проблему.

person bdmontz    schedule 08.11.2017

Установите для isPrefetchingEnabled вашего представления коллекции значение false, ИЛИ (что лучше решает вашу проблему) используйте методы предварительной выборки в UICollectionViewDataSourcePrefetching/UITableViewDataSourcePrefetching, чтобы получить более плавную и эффективную прокрутку. Выполните любую веб-загрузку, чтобы данные были готовы к моменту создания ячейки.

person Максуд Даудов    schedule 07.11.2017