Wie Sie UICollectionView contentSize.die Höhe basiert auf der Anzahl der Zeilen in swift
Ich würde mich wirklich freuen, wenn jemand Licht einige Ideen hier. Ich habe versucht, dies zu beheben für mehrere Wochen (kein Witz).
Habe ich eine "to-do-Liste" mit einem collectionView, wo ich das ausblenden der Zeilen, die abgeschlossen wurden, und verschieben Sie Sie an das Ende der Liste. Ich habe dann einblenden der Elemente, wenn erforderlich, mit einem Knopf. Der collectionView sieht genau wie ein tableView mit ein Element(Zelle) pro Zeile.
Wenn die Elemente ausgeblendet werden, die collectionView hat eine Menge von leeren Blättern Platz unten statt "automatisch" löschen des Speicherplatzes, der von den versteckten Zeilen, da Sie technisch noch vorhanden sind.
Ich versuche zu schneiden, dass der leere Raum also, der collectionView die Höhe ist gleich der Anzahl von Zellen/Zeilen sichtbar gelassen.
override func viewDidAppear(animated: Bool) {
if isCellHidden { //checking if cells are hidden
var heightOfSection0 = 95 + (42 * self.collectionView.numberOfItemsInSection(0))
println(self.collectionView.contentSize.heigh) //returns 2350
self.collectionView.contentSize.height = CGFloat(heightOfSection0)
println(heightOfSection0) //returns 1019
println(self.collectionView.contentSize.heigh) //returns 1019.0 which is correct but as soon as I scroll down it resets to it's original size (2350) and let's me scroll through that empty space...
}}
Wenn ich versuche zu Lesen, die collectionView Höhe sofort nach dem einstellen dieser, es zeigt den richtigen Wert, aber sobald ich versuche zu scrollen, er setzt zurück zu seiner ursprünglichen Höhe. Ich habe auch versucht, das deaktivieren der auto-layout, und es sieht nicht einen Unterschied machen
- Versuchen Sie die Größe in
sizeForItemAtIndexPath
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht verwalten
contentSize
direkt - Rückkehr entsprechende Anzahl der anzuzeigenden Elemente auscollectionView(_:numberOfItemsInSection:)
statt (d.h. Sie zählen nicht Ihre "versteckten" Zellen).contentSize
könnte funktionieren, in einigen Fällen, aber es ist unnötig kompliziert und kann dazu führen, unerwartete Verhaltensweisen (wie in Ihrem Fall).Können Sie
sizeForItemAtIndexPath:
zum ändern der Größe der Ansicht Sammlung Zelle.Ändern UI-Sachen in
viewDidAppear()
in der Theorie ist ein guter Ort, dies zu tun. Jedoch, an diesem Punkt, Sie können nicht sicher sein, dass auto-layout betrieben, die auf die Untersicht, in der Sie sind, zu manipulieren.Können Sie überprüfen, wenn es hat und Wann es sicher ist, zu manipulieren, den Rahmen, durch vererben und überschreiben
layoutSubviews()
Hatte ich ein ähnliches Problem hier: https://stackoverflow.com/a/30446125/4396258