Подтвердить что ты не робот

UICollectionView - iOS 10 - авария на симуляторе iPhone 6 Plus, но работает на реальном устройстве

Я создал UICollectionView, который отлично работает на небольших устройствах, таких как iPhone 5s/SE/6/6s/7 как на симуляторе, так и на реальном устройстве, но у меня странная ситуация, когда речь идет о iPhone 6Plus, iPhone 7Plus и любом Версия для iPad. Он отлично работает на реальном устройстве, но он сбой в симуляторе со следующей ошибкой:

Ошибка утверждения в - [_ UIFlowLayoutSection computeLayoutInRect: forSection: утратившими силу: invalidationContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.5.2/UIFlowLayoutSupport.m:823

Завершение приложения из-за неперехваченного исключения "NSInternalInconsistencyException", причина: 'Внутренняя ошибка UICollectionViewFlowLayout'

То, что я выяснил до сих пор, заключается в том, что если я удалю оцененныйItemSize, он отлично работает, но автоматическая компоновка больше не работает, но если у меня есть это, то он сработает в симуляторе.

Я использую последнюю версию Xcode и iOS 10.

Любые идеи, почему он рушится?

4b9b3361

Ответ 1

Вызов invalidateLayout перед макетом является обходным путем для этой проблемы.

В подклассе UIViewController:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    collectionView.collectionViewLayout.invalidateLayout()
}

или в подклассе UIView:

override func layoutSubviews() {
    super.layoutSubviews()
    collectionView.collectionViewLayout.invalidateLayout()
}