Wie zentriere ich die Zellen einer UICollectionView horizontal und vertikal?

8

Wie zentriere ich vertikal und horizontal alle Zellen in UICollectionView mit UICollectionViewFlowLayout ?

Das Flow-Layout lässt den Abstand rechts oder unten abhängig von der Scroll-Richtung. Ich möchte die gleiche Polsterung auf allen Seiten einstellen. Ich habe mit der sectionInset -Eigenschaft von UICollectionViewFlowLayout herumgespielt.

    
jjxtra 12.03.2013, 07:47
quelle

3 Antworten

5

Ich würde vorschlagen, das Protokoll UICollectionViewDelegateFlowLayout zu implementieren, um die horizontale und vertikale Zentrierung Ihrer Zellen dynamisch zu erreichen. Aus der UICollectionViewDelegateFlowLayout-Protokollreferenz :

  

Das UICollectionViewDelegateFlowLayout-Protokoll definiert Methoden, mit denen Sie mit einem UICollectionViewFlowLayout-Objekt zur Implementierung eines gitterbasierten Layouts koordinieren können. Die Methoden dieses Protokolls definieren die Größe von Elementen und den Abstand zwischen Elementen im Raster.

     

Alle Methoden in diesem Protokoll sind optional. Wenn Sie keine bestimmte Methode implementieren, verwendet der Flow-Layout-Delegat Werte in seinen eigenen Eigenschaften für die entsprechenden Abstandsinformationen.

     

Das Flow-Layout-Objekt erwartet, dass das Delegate-Objekt der Sammlungsansicht dieses Protokoll annimmt. Implementieren Sie daher dieses Protokoll für ein Objekt, das der Delegateigenschaft der Auflistungsansicht zugewiesen ist.

Sie werden wahrscheinlich am meisten an der Methode collectionView:layout:insetForSectionAtIndex: interessiert sein, mit der Sie den Inset auf allen vier Seiten des Bildschirms mit etwas wie UIEdgeInsetsMake anpassen können. Sie können die Einfügungen gemäß der Bildschirmgröße bestimmen, indem Sie die entsprechende Menge, z. B. die Größe der Zellen, von der entsprechenden Bildschirmdimension (vertikal oder horizontal) subtrahieren. Dann dividiere durch zwei, um gleiche Einfügungen für eine bestimmte Dimension zu erhalten.

    
Daniel 12.03.2013 11:32
quelle
1

Benutzte Abschnittsinset?

Ok, versuche mit minimumLineSpacing property und zu spielen    minimumInteritemSpacing Eigenschaft

minimumLineSpacing

Bei einem vertikal scrollenden Raster repräsentiert dieser Zeilenabstand den minimalen Abstand zwischen aufeinanderfolgenden Zeilen. Bei einem horizontal scrollenden Raster repräsentiert dieser Wert den minimalen Abstand zwischen aufeinanderfolgenden Spalten. Dieser Abstand wird nicht auf das Leerzeichen zwischen der Kopfzeile und der ersten Zeile oder zwischen der letzten Zeile und der Fußzeile angewendet.

minimumInteritemSpacing

Bei einem vertikal rollenden Raster repräsentiert dieser Abstand den minimalen Abstand zwischen Elementen in derselben Zeile. Bei einem horizontal scrollenden Raster stellt dieser Wert den minimalen Abstand zwischen Elementen in derselben Spalte dar. Dieser Abstand wird verwendet, um zu berechnen, wie viele Elemente in eine einzelne Zeile passen können, aber nachdem die Anzahl der Elemente bestimmt wurde, kann der tatsächliche Abstand möglicherweise nach oben angepasst werden.

    
Charan 12.03.2013 07:51
quelle
-1

Unterklasse UICollectionViewFlowLayout und überschreiben Sie die Methode layoutAttributesForElementsInRect: , um Ihre UICollectionViewCells :

auszurichten %Vor%

Ich habe diesen Code nicht für Sie bearbeitet, und es gibt Verweise auf Makros und Instanzvariablen, so dass Sie ihn anpassen müssen, um das zu tun, was Sie wollen. Dies wurde verwendet, um ein Coverflow-Layout zu erstellen, aber die Prinzipien werden für Sie die gleichen sein, aber ohne das 3D-Geschäft. Sie müssen den Abschnittseinsatz festlegen, um eine einzelne Zeile oder Spalte in Ihrem Flow zu gewährleisten.

    
Lee Probert 12.03.2013 15:16
quelle