Wie neuzeichnen nicht sichtbare UICollectionViewCell ist bereit für wenn Wiederverwendung auftritt ???Wie kann man nicht sichtbare UICollectionViewCells nach der Rotation wiederherstellen, wenn die Wiederverwendung stattfindet?
Ein Ansatz, an den ich dachte, war per Code in der Funktion prepareForReuse der Layout-Zelle, aber während es funktioniert, ist es nicht optimal, da es mehr Re-Drawing erfordert.
Hintergrund: Müssen drawRect
für Zellen nach einer Orientierungsänderung auslösen, die nicht aktuell sichtbar sind, aber pop up verwendet werden und wurden nicht neu gezeichnet, so weit bis jetzt kann ich nur sehen, dass prepareForReuse
wäre angemessen. Problem ist, dass ich alle "Wiederverwendungs" -Zellen neu zeichne, während ich wirklich nur diejenigen neu zeichnen möchte, die während der vorherigen Ausrichtungsposition des Geräts erstellt wurden.
ZUSÄTZLICHE INFORMATIONEN: Also zur Zeit ich das tue:
In Viewcontroller:
override func viewWillLayoutSubviews() {
// Clear cached layout attributes (to ensure new positions are calculated)
(self.cal.collectionViewLayout as! GCCalendarLayout).resetCache()
self.cal.collectionViewLayout.invalidateLayout()
// Trigger cells to redraw themselves (to get new widths etc)
for cell in self.cal?.visibleCells() as! [GCCalendarCell] {
cell.setNeedsDisplay()
}
// Not sure how to "setNeedsDisplay" on non visible cells here?
}
im Layout-Zellen-Klasse:
override func prepareForReuse() {
super.prepareForReuse()
// Ensure "drawRect" is called (only way I could see to handle change in orientation
self.setNeedsDisplay()
// ISSUE: It does this also for subsequent "prepareForReuse" after all
// non-visible cells have been re-used and re-drawn, so really
// not optimal
}
Beispiel von dem, was in prepareForReuse ohne den Code geschieht über. Snapshot genommen, nachdem eine Orientierungsänderung, und nur nach ein wenig Scrollen nach oben:
Zellen sollten die Ausrichtung nicht kennen müssen.Wenn Sie sie neu zeichnen müssen, wenn sich die Ausrichtung ändert, stellen Sie diese Logik stattdessen in der Sammlungsansicht ein, und lassen Sie dann in der Sammlungsansicht den Zellen mitteilen, ob sie neu zeichnen müssen oder nicht. – Simon
@Simon Ich bin mir nicht sicher in diesem Fall, wie man (vom Kontroller) die Zellen identifiziert, die nicht sichtbar sind (und zurück in das Bild bei der Wiederverwendung erscheint), um "setsNeedsDisplay" auf ihnen aufzurufen? Ich werde einige weitere Details in meiner Frage – Greg
der CellForRow hinzufügen: AtIndexPath: wird aufgerufen, bevor sie sichtbar wird :) – Simon