2016-06-20 11 views
2

Ich habe eine Collectionview, die zwischen 2 Layouts wechseln kann. Ein Layout ist wie ein normales Fließlayout und skaliert die Elemente automatisch in Breite und Höhe. Der andere sollte ein Tabellenansicht-ähnliches Layout sein, mit einer festen Breite der Elemente, aber mit einer automatischen Größenanpassung.TableView-Like UICollectionView Layout

Ich habe es geschafft, die beiden Layouts mit collectionView(_:layout:sizeForItemAtIndexPath) zu implementieren, aber nur mit einer festen Artikelgröße. Daher möchte ich, wenn möglich, die selbstbestimmenden Zellen nutzen, ohne die Delegiertenmethode zu implementieren.

Wie kann ich die Zellen am besten automatisch vergrößern, während sie für Tableview-ähnliche Layouts volle Breite benötigen?

+1

Warum nicht auch eine Tabellenansicht haben und zwischen den beiden wechseln? –

+2

weil Schaltpläne in einer einzigen uicollectionview ermöglicht Übergangsanimation zwischen den Layouts – fabb

+0

das ist interessant: https://github.com/Raizlabs/RZUtils/tree/master/RZUtils/Components/RZCollectionTableView – fabb

Antwort

-2

Unser benutzerdefiniertes Layout muss ungültig gemacht werden, wenn sich die Breite der Sammlungsansicht ändert, aber nicht vom Scrollen betroffen ist. Glücklicherweise übergibt die Sammlungsansicht ihre neuen Grenzen an die Methode shouldInvalidateLayoutForBoundsChange:. Dies ermöglicht es uns, die Ansicht der aktuellen Grenzen auf den neuen Wert zu vergleichen und nur zurückgeben JA, wenn wir haben:

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds 
{ 
CGRect oldBounds = self.collectionView.bounds; 
if (CGRectGetWidth(newBounds) != CGRectGetWidth(oldBounds)) { 
    return YES; 
    } 
    return NO; 
} 

Änderungen aus einer Sammlung Ansicht Layout zum anderen kann auf eine ähnliche Art und Weise animiert werden. Wenn eine Sammlungsansicht eine -Methode gesendet wird, fragt sie das neue Layout nach den neuen Layoutattributen der Zellen ab und animiert dann jede Zelle (identifiziert durch denselben Indexpfad im alten und im neuen Layout) von ihren alten zu ihren neuen Attributen. Du musst nichts tun.

+0

aber wie kann ich selbst-Sizing-Zellen haben, und sie gezwungen haben volle Breite für Tabellenansicht-ähnliches Layout? – fabb

+0

durch Erstellen von zwei Layout-Unterklasse-Dateien. –

+0

könnten Sie den vollständigen Code posten? Ich kämpfe mit dem Auto-Sizing-Teil. – fabb

Verwandte Themen