[objective-c] UICollectionView Dekoration und ergänzende Ansichten können nicht verschoben werden


1 Answers

Ich hatte das gleiche Problem. Es scheint, dass es einige Bugs mit dem UICOLectionview gibt (das ist nicht das erste, was ich gesehen habe). Ich habe es behoben, indem ich "performBatchUpdates" nicht verwendet habe. Ich verliere die Animation - aber auf der Liste gibt es keine unerwünschte Ansicht.

Question

In UICollectionView scheinen Dekoration und ergänzende Ansichten ein großes Geheimnis zu sein. Im Moment scheint es keinen Code zu geben. Ich habe es geschafft, beide Typen in einem benutzerdefinierten Layout arbeiten zu lassen (siehe diesen Beitrag für einige Details). Solange sie in der gleichen Position bleiben, ist alles in Ordnung (dh wenn sich ihr layoutAttributes.frame nicht ändert).

Sobald ich jedoch geänderte layoutAttributes für Dekoration oder ergänzende Ansichten neu layoutAttributes sie visuell dupliziert - dh es gibt eine Kopie im Hintergrund an ihrem ursprünglichen Ort und eine Kopie an ihrem neuen Ort. Das Verhalten ist identisch, wenn ich sie von XIBs oder vollständig im Code instanziiere und das Verhalten für normale Zellen nicht auftritt.

Zuerst dachte ich, dass es sich um ein Redraw-Problem handelt, aber diese "Kopien" überleben Re-Layout, Neuzeichnen usw. Sie sind jedoch keine echten Kopien, da die layoutAttributesForDecorationView usw. nie für sie aufgerufen werden (nur für die neuen Orte) . Im Hintergrund scheint es in der UICollectionView etwas Caching zu UICollectionView .

Hat jemand das funktioniert oder irgendwelche Ideen? Ich muss sagen, dass ich neu auf der iOS-Plattform bin, also könnte es auch einfache Dinge wie die Einstellung der "Clips gebunden" oder "Clear Graphics Context" -Eigenschaften (ich probierte diese, aber es könnte etwas ähnliches sein).

Das macht mich wahnsinnig und es ist seltsam, dass es absolut keinen Beispielcode gibt.

Ich frage mich: Sind Dekoration und ergänzende Ansichten nicht neu positioniert? (Ich hoffe nicht)




Ich weiß, dass dies eine alte Frage ist, aber ich bin darauf gestoßen, als es Probleme mit ergänzenden Ansichten gab, die beim Entwerten eines Layouts überall wiederholt wurden. Ich glaube, es ist ein Fehler, und ich habe es behoben, indem ich InvalidateLayout in mein Layout-Objekt eingefügt und die zusätzlichen Ansichten wie folgt entfernt habe:

- (void)invalidateLayout {
    [super invalidateLayout];
    // Manually remove all suplementary views of a certain type
    /**
     ** This appears to be a BUG. Invalidate view does not remove suplementary view
     **     from the view hierachy. But they are Orphaned so stay on screen. 
     **/
    for (UIView *subview in [self.collectionView subviews]) {
        if ([subview isKindOfClass:[UICollectionReusableView class]]) {
            [subview removeFromSuperview];
        }
    }
}

Ersetzen Sie UICollectionReusableView durch die Klasse Ihrer wiederverwendbaren Ansicht, die auf dem Bildschirm UICollectionReusableView .

Hoffe, das hilft jemandem.




Related