Ich verwende eine UICollectionView programmgesteuert.UICollectionView mit FlowLayout nicht scrollen, wenn Abschnittseinfügungen
Ich habe festgelegt es Rahmen ist wie folgt:
UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 3000) collectionViewLayout:flowLayout];
Mein UICollectionViewFlowLayout
hat einen Einschub Abschnitt eingestellt, wie:
flowLayout.sectionInset = UIEdgeInsetsMake(20.0, 20.0, 100.0, 20.0);
ich auch nur 1 Schnitt haben.
Ich habe die Höhe auf 3000 eingestellt, um zu sehen, ob die Ansicht der Sammlung scrollen würde, aber nicht. Ich setze es darauf, da die Ansicht der Sammlung nicht nach oben oder unten scrollt, wenn ich neue Objekte einfüge.
UICollectionView
ist von einem UIScrollView
abgeleitet, was bedeutet, dass ich die Inhaltsgröße der Bildlaufansicht zurücksetzen kann. Würde das richtig funktionieren?
Das einzige Problem ist, dass dies funktionieren würde, wenn ich die Größen aller Elemente einschließlich der Anzahl der Elemente in jeder Zeile kenne.
Wenn jedes Element eine andere Größe hätte, wie würde ich die Größe jeder Zeile herausfinden? Ich würde das brauchen, um alle Reihengrößen hinzuzufügen und die Höhe der Inhaltsgröße von self.collectionView
zu erhöhen.
EDIT
Auch über meinen Vorschlag, den Inhalt Größe zurückzusetzen, funktioniert nicht richtig! Ich habe Folgendes versucht, wenn ich meine Sammlungsansicht aktualisiere:
int numberOfRows = self.dataArray.count/3;
self.collectionView.contentSize = CGSizeMake(self.view.frame.size.width, (numberOfRows * 200) + 300);
Dies ist sehr hässlich obwohl. Das liegt daran, dass angenommen wird, dass alle meine Bilder eine Größe von 200x200px haben, was 3 Bildern pro Zeile entspricht (daher die Teilung durch 3).
Darüber hinaus, auch mit der +300, die ich habe, die letzte Zeile kann ich nur etwa 3/4 davon und nicht alles davon sehen. Ich muss mehr scrollen und ich werde es sehen können, aber es geht wieder zurück zu 3/4. Die Art wie die zu aktualisierende Rolle, in der sich die Ansicht nur bewegt, wenn Sie sie ziehen und wenn Sie sie verlassen, springt sie zurück, wo sie war. Warum passiert dies? Ist es nur so, dass Apple UICollectionView
so schlecht entworfen hat? Das ist ein bisschen lächerlich ... UITableViews passt ihren Bildlauf automatisch an ihren Inhalt an.
Das war die Lösung für mich. Ich habe ein benutzerdefiniertes Flow-Layout verwendet, das die vertikalen Lücken zwischen Elementen in einem mehrspaltigen Layout entfernt hat. Ich bekam nur ungefähr die Hälfte der Gegenstände, bis ich es tat, wie Simon es vorgeschlagen hatte. Ich vermute, der Grund, warum ich das Problem hatte, ist, dass die Anzahl der abgefragten Artikel auf einem Standard-Layout basiert. –