UICollectionView Legt die Anzahl der Spalten fest
Ich habe gerade angefangen zu lernen über UICollectionViews. Ich Frage mich, ob jemand weiß, wie man geben Sie die Anzahl der Spalten in eine collectionview. Die Standardeinstellung ist 3 (iPhone/hochformat). Ich habe schaute auf die Unterlagen und können nicht scheinen zu finden, eine schlüssige Antwort.
InformationsquelleAutor der Frage SNV7 | 2013-02-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
CollectionViews sind sehr mächtig, und Sie kommen zu einem Preis. Viele, und viele Optionen. Als omz sagte:
Ich würde vorschlagen, die Umsetzung der
<UICollectionViewDelegateFlowLayout>
- Protokoll, so dass Sie Zugriff auf die folgenden Methoden, in denen Sie mehr Kontrolle über das layout IhrerUICollectionView
ohne die Notwendigkeit für Unterklassen:collectionView:layout:insetForSectionAtIndex:
collectionView:layout:minimumInteritemSpacingForSectionAtIndex:
collectionView:layout:minimumLineSpacingForSectionAtIndex:
collectionView:layout:referenceSizeForFooterInSection:
collectionView:layout:referenceSizeForHeaderInSection:
collectionView:layout:sizeForItemAtIndexPath:
Auch die Umsetzung der folgenden Methode wird Kraft Ihrer UICollectionView, um ihn zu aktualisieren, das layout auf eine Orientierung ändern: (sagen Sie, Sie wollten die Größe der Zellen für die Landschaft und machen Sie stretch)
Zusätzlich sind hier 2 wirklich gute tutorials auf
UICollectionViews
:http://www.raywenderlich.com/22324/beginning-uicollectionview-in-ios-6-part-12
http://skeuo.com/uicollectionview-custom-layout-tutorial
InformationsquelleAutor der Antwort jhilgert00
Swift-4.1 und iOS 11, Sie können verwenden Sie eine der 4 folgenden Implementierungenum die Anzahl von Elementen pro Zeile in der
UICollectionView
bei der Verwaltung von Einlagen und die Größe der änderungen (einschließlich Drehung).#1. Unterklassen
UICollectionViewFlowLayout
und mitUICollectionViewFlowLayout
'sitemSize
EigenschaftColumnFlowLayout.swift:
CollectionViewController.swift:
#2. Mit
UICollectionViewFlowLayout
'sitemSize
Methode#3. Mit
UICollectionViewDelegateFlowLayout
'scollectionView(_:layout:sizeForItemAt:)
Methode#4. Unterklassen
UICollectionViewFlowLayout
und mitUICollectionViewFlowLayout
'sestimatedItemSize
EigenschaftCollectionViewController.swift:
FlowLayout.swift:
Zelle.swift:
InformationsquelleAutor der Antwort Imanou Petit
Ich umgesetzt
UICollectionViewDelegateFlowLayout
auf meineUICollectionViewController
und überschreiben Sie die Methode verantwortlich für die Bestimmung der Größe der Zelle. Ich nahm dann die Bildschirm-Breite und teilte es mit meiner Spalte Anforderung. Zum Beispiel wollte ich 3 Spalten auf jeder Bildschirmgröße. So, hier ist, was mein code siehtInformationsquelleAutor der Antwort noob
Erweiterung auf noob ' s Antwort:
Dies ermöglicht der Abstand zwischen den Zellen. Es geht von einem
Int
member-variable namensnumberOfItemsPerRow
und auch, dass alle Zellen quadratisch sind und dieselbe Größe. Wie bereits in jhilgert00 die Antwort müssen wir reagieren auch auf die Ausrichtung ändert, aber jetzt durchviewWillTransitionToSize
alswillRotateToInterfaceOrientation
abgeschrieben.InformationsquelleAutor der Antwort sgib
Hier ist der funktionierende code für Swift 3, eine zwei-Spalten-layout :
Fühlen Sie sich frei zu ändern", nbCol" Ihre gewünschte Anzahl von Spalten.
InformationsquelleAutor der Antwort fraxool
Aktualisiert Swift 3:
Statt der flow-layout, ich es vorziehen mit benutzerdefinierten Layouts für eine bestimmte Anzahl Spalten-und Zeilennummer. Denn:
Normale Zelle und eine Header-Zelle: (Add UILabel als IBOutlet zu Ihrem xib):
Benutzerdefinierte layout:
CollectionView:
Verwenden CollectionView aus ViewController:
Schließlich können Sie haben Lust auf CollectionView!
InformationsquelleAutor der Antwort brianLikeApple
Weil
UICollectionView
ist so flexibel, es gibt mehrere Möglichkeiten, wie Sie könnte die Anzahl der Spalten, je nach der Art von layout, das Sie verwenden.Den
UICollectionViewFlowLayout
(das ist wahrscheinlich das, was Sie arbeiten) nicht geben Sie eine Anzahl von Spalten, die sich direkt (da hängt es von der view Größe/Ausrichtung). Der einfachste Weg, um es zu ändern wäre, um dieitemSize
Eigentum und/oderminimumInteritemSpacing
/minimumLineSpacing
.InformationsquelleAutor der Antwort omz
Wenn Sie faul sind mit zu delegieren.
PS: Sollte aufgerufen werden, nachdem die rotation zu
InformationsquelleAutor der Antwort HotJard
Swift 3.0. Werke für horizontalen und vertikalen scroll-Richtungen und variable Abstände
Geben Sie die Anzahl der Spalten
Konfigurieren
flowLayout
zum Rendern angegebennumberOfColumns
InformationsquelleAutor der Antwort Jože Ws
Seine alle über-layout, das Sie zeichnen möchten. Sie können benutzerdefinierte Klasse erbt von UICollectionViewFlowLayout. Derzeit gibt es keine direkte Methode, um Spalten. Wenn Sie erreichen wollen, diese Art von Funktionalität, die Sie benötigen, um es manuell tun. Sie müssen behandeln Sie es in Ihre custom flow-layout-Klasse.
Nun die Frage, wie Sie es tun? Wenn Sie nicht wollen, zu stören cell frame können Sie einstellen,
Einen anderen Weg geben, Sie eigene Positionen der Zellen. Durch überschreiben von unten zwei Methoden, die aufgerufen werden, während Ihre layout-formation.
UICollectionViewLayoutAttributes ist Klasse, die sich mit Zell-position, Rahmen, Zindex etc
InformationsquelleAutor der Antwort Swapnil
Diese Antwort ist für swift 3.0 -->
ersten entsprechen dem Protokoll :
dann fügen Sie diese Methoden :
InformationsquelleAutor der Antwort MhmdRizk
die perfekte Lösung,
Mit UICollectionViewDelegateFlowLayout
aber Sie können auch leicht so berechnen Sie die Zellenbreite und-aufgeteilt auf die gewünschte Anzahl der Spalten, die Sie wollen
tricky ist es, die Breite mit keiner Fraktion
InformationsquelleAutor der Antwort Amr Angry
Wollte ich nur anfügen Imanou Petit Antwort #2. Um sicherzustellen Margen sind die genauen unabhängig von der Bildschirmbreite, ich verwenden einen iterativen solver, die eine gewünschte Marge, und die Anzahl der Spalten als Eingaben. Ich habe auch einen Richtungs-flag auf, wo Ihre endgültige Margen im Vergleich zu Ihren Ziel.
Den iterativen solver ist unten dargestellt und gibt cellWidth und Marge.
Ich nenne es so:
Ich dann die cellWidth-und margin-Werte der flow-layout als solche:
{
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
zurück CGSize(Breite: cellWidth, Höhe: cellWidth)
}
}
Hoffe, das hilft. Es ist wahrscheinlich ein einfacher Weg, um sicherzustellen, die Margen sind genau, aber das ist eine Methode. Auch dieser code ist nicht getestet worden für Geräte, die rotierende collectionviews.
Dank,
InformationsquelleAutor der Antwort Jan-Michael Tressler
Machte ich eine Sammlung layout.
Machen das Trennzeichen sichtbar sind, Legen Sie die Hintergrundfarbe der Ansicht Sammlung zu Grau.
Eine Zeile pro Abschnitt.
Usage:
Layout:
InformationsquelleAutor der Antwort Chen Jiling
Versuchen Sie Dieses,Es funktioniert perfekt für mich,
Gehen Sie wie folgt vor:
1. Werte definieren .h-Datei.
ODER
2.Fügen Sie Code in die Sammlung Anzeigen der Layout-Daten-source-Methoden, wie unten,
Hoffe, das wird helfen, einige.
InformationsquelleAutor der Antwort Jaywant Khedkar