UICollectionView Absturz beim Scrollen beim Drehen (Layoutattribute für Zusatzelement im Indexpfad geändert, ohne ungültig zu machen ..)

8

Irgendwelche Ideen, wie ich die Tatsache beheben kann, dass meine UICollectionView beim Scrollen beim Drehen abstürzt?

Ich verwende den folgenden Ansatz zum Scrollen und Drehen separat, und beide scheinen gut zu funktionieren. Ich habe gerade bemerkt, dass wenn ich beide Dinge gleichzeitig mache, ich diesen Absturz bekommen kann. Es scheint also etwas damit zu tun zu haben, dass wenn ich das Gerät rotiere und die neuen Layoutattribute in prepareLayout berechnet werden, dass das fortlaufende Scrolling "invalidateLayoutWithContext (invalidContext)" auslöst (siehe unten).

Ideen? Gibt es eine Möglichkeit, Scroll-Antworten während der Rotation zu halten (oder zu ignorieren)?

Rotationsansatz In viewWillLayoutSubviews im View-Controller mache ich das ganze Layout ungültig

%Vor%

Scrollender Ansatz Damit ich eine "klebrige" dekorative Ansicht (Kopfzeile) habe, mache ich das ganze Layout nicht ungültig, da es die Leistung zerstört, aber Folgendes tun. In der Layoutklasse überschreibe ich shouldInvalidateLayoutForBoundsChange

%Vor%

Beachten Sie, dass ich die dekorative Ansicht (Kopfzeile) ungültig mache, während der Fehler beim Absturz darin besteht, dass meine zusätzlichen Ansichtslayouts unterschiedlich sind.

Fehler

  

2015-10-30 07: 14: 30.181 test3_collectionview [17086: 3102132] *   Assertionsfehler in - [UICollectionViewData validateLayoutInRect:],   /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.29.5/UICollectionViewData.m:408   2015-10-30 07: 14: 30.185 test3_collectionview [17086: 3102132] *   Beenden einer App aufgrund einer nicht abgefangenen Ausnahme   'NSInternalInconsistencyException', Grund: 'Layoutattribute für   Zusatzelement im Indexpfad ({length =   2, Pfad = 0 - 0}) geändert von    Index   Pfad: ({Länge = 2, Pfad = 0 - 0}); Element   Art: (Dekorativ1); Rahmen = (0 1085,5; 320 16); zIndex = 1; zu    Index   Pfad: ({Länge = 2, Pfad = 0 - 0}); Element   Art: (Dekorativ1); Rahmen = (0 853,5; 320 16); zIndex = 1; ohne   das Layout ungültig machen '   *** Erster Aufrufstapel:

    
Greg 29.10.2015, 21:40
quelle

1 Antwort

1

Ich bin mir nicht sicher, ob das ausreichen würde, aber ich würde versuchen, etwas in dieser Richtung (eine Sammelansicht ist eine Bildlaufansicht):

%Vor%     
Eppilo 07.11.2015, 21:26
quelle