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?
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%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.
Sie sollten beide Methoden (Header und Footer) implementieren. Selbst wenn Sie nur einen wollen. Schau dir meinen Code an
%Vor%Tags und Links ios uicollectionview uicollectionviewlayout uicollectionreusableview