Probleme beim Einfügen in den UICollectionView-Abschnitt, der eine Fußzeile enthält

8

Ich habe eine typische UICollectionView, die UICollectionViewFlowLayout vertikal verwendet. Ich verwende eine Rest-API mit Paginierung, um die Sammlungsansicht zu füllen. Um die nächste Seite zum Herunterladen auszulösen, benutze ich den Delegaten, wenn er nach dem Fußzeilenlayout fragt:

%Vor%

Hier ist der Code hinter meinem loadNextPageOfAssets:

%Vor%

Wenn ich laufe, kann ich zu meinem ViewController gehen und die erste Seite der geladenen Assets sehen. Wenn ich nach unten scrolle, sehe ich die Fußzeilenansicht (die einen Drehknopf enthält), aber dann bricht der Code am Ausnahmeblockpunkt um Zeile:

ab %Vor%

Assertionsfehler in - [UICollectionViewData layoutAttributesForSupplementaryElementOfKind: atIndexPath:], /SourceCache/UIKit/UIKit-3185.20/UICollectionViewData.m:829

Wenn ich fortfahre, stürzt es mit dem Fehler ab:

2014-06-11 16: 39: 58.335 Radius-iOS [4901: 525006] * Beenden der App aufgrund der nicht abgefangenen Ausnahme 'NSInternalInconsistencyException', Grund: 'Keine UICollectionViewLayoutAttributes-Instanz für -layoutAttributesForSupplementaryElementOfKind: UICollectionElementKindSectionFooter bei Pfad {length = 2, Pfad = 0 - 0} ' * Erster Aufrufstapel:

Das ist rätselhaft für mich. layoutAttributesForSupplementaryElementOfKind klingt, als ob es etwas mit der Layout-Klasse zu tun hat, aber ich verwende kein benutzerdefiniertes Flow-Layout, sondern das Standard-Layout. Es klingt, als wäre Apples Code verrückt, aber ich fühle, dass ich alles richtig benutze.

Wenn ich jetzt den Anruf verschiebe:

%Vor%

von der Zusatzzelle aus der Warteschlange auf die UICollectionViewCell Deque, und entfernen Sie die Fußzeilenansichten alle zusammen, dann funktioniert die Einfügung groß.

Im Moment rufe ich reloadData anstelle von insert auf, aber das ist UGLY.

Betrachte ich etwas über die Fußzeilen?

    
VaporwareWolf 11.06.2014, 23:53
quelle

4 Antworten

9

Die Antwort von VaporwareWolf ist ein bisschen wie ein Hack. Durch das Zurückgeben einer kleinen Größe anstelle einer Nullgröße wird die ergänzende Ansicht immer vorhanden sein, jedoch in einer Größe, die zu klein ist, um sie zu sehen. Aus diesem Grund behebt es die NSInternalInconsistencyException

Aber es gibt eine echte Lösung .

Nach Hinzufügen der Daten zur Datenquelle und before ruft insertItemsAtIndexPaths auf, mache nur das Layout in der collectionview ungültig, um auf die Änderungen aufmerksam zu machen.

Ziel-C

%Vor%

Schnell

%Vor%     
Johannes 05.04.2016, 21:21
quelle
8

Es stellte sich heraus, dass ich tatsächlich ein Problem mit dem Layout hatte (wie die Fehlerbeschreibung nahelegt)

%Vor%

CGSizeZero hat den Absturz verursacht. Verwenden Sie stattdessen CGSizeMake (0,001, 0,001). Das war die einzige Änderung, die notwendig war. Es läuft jetzt wie beabsichtigt.

    
VaporwareWolf 15.08.2014 18:47
quelle
0

Es gibt einen großen russischen Artikel über Bugs in UICollectionView: Ссылка .

Hier sind ein paar Methoden aus diesem Artikel, die Ihr Problem lösen können:

%Vor%

oder

%Vor%     
bzz 19.06.2014 18:39
quelle
0

Sie sollten beide Methoden (Header und Footer) implementieren. Selbst wenn Sie nur einen wollen. Schau dir meinen Code an

%Vor%     
Ivan Vavilov 14.08.2014 19:58
quelle