2016-11-22 3 views
10

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

Assertion failure in -[_UIFlowLayoutSection computeLayoutInRect:forSection:invalidating:invalidationContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.5.2/UIFlowLayoutSupport.m:823

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UICollectionViewFlowLayout internal error'

То, что я узнал, до сих пор является то, что если я удалю estimatedItemSize он работает нормально, но авто-макета не больше, но если у меня есть это, это может привести к сбоям в симуляторе.

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

Любые идеи, почему это сбой?

+0

вы смотрите на это http://stackoverflow.com/questions/39498503/collectionviewcontentsize-in-ios -10-using-self-sizing-cells – PrafulD

+0

очень странно. попробовали ли вы очистить папку DerivedData? – Nathaniel

+0

@PrafulD да, но у меня нет такого случая – lorandcsatlos

ответ

11

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

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

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

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

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

Является ли это ошибкой от Apple, или мы делаем что-то неправильно? Все это работало для меня, пока я использовал 'UICollectionViewController', после переключения на' UIViewController', я получил эту ошибку: -/ – d4Rk

+2

IMO, это ошибка UIKit. Если вы поддерживаете iOS 10, вам необходимо обход ошибки. –

+1

Спасибо, ваш ответ спас мой день. Он работает отлично, без обходного пути в iOS 11, но для iOS 10 вам нужно вызвать invalidateLayout() – fruechtemuesli

Смежные вопросы