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.
Любые идеи, почему он рушится?
Ответы
Ответ 1
Вызов invalidateLayout
перед макетом является обходным путем для этой проблемы.
В подклассе UIViewController
:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
collectionView.collectionViewLayout.invalidateLayout()
}
или в подклассе UIView
:
override func layoutSubviews() {
super.layoutSubviews()
collectionView.collectionViewLayout.invalidateLayout()
}