Wie stelle ich den Zellenabstand in einem Abschnitt von ein UICollectionView
? Ich weiß, dass es eine Eigenschaft gibt, die minimumInteritemSpacing
ich auf 5.0 gesetzt habe, aber der Abstand erscheint nicht 5.0. Ich habe die Flowout-Delegate-Methode implementiert.
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 5.0;
}
Trotzdem bekomme ich nicht das gewünschte Ergebnis. Ich denke, es ist der minimale Abstand. Gibt es keine Möglichkeit, den maximalen Abstand einzustellen?
ios
objective-c
uicollectionview
Vishal Singh
quelle
quelle
Antworten:
Ich weiß, dass das Thema alt ist, aber falls jemand hier noch die richtige Antwort braucht, was Sie brauchen:
Fügen Sie eine Implementierung wie folgt hinzu:
Dabei kann MaximumSpacing auf einen beliebigen Wert eingestellt werden. Dieser Trick garantiert, dass der Abstand zwischen den Zellen genau gleich dem maximalen Abstand ist !!
quelle
mutableCopy
kein a erstellen müssen : Sie mutieren nicht den Inhalt des Arrays, sondern die darin enthaltenen Objekte.if
eine zusätzliche Bedingung in AND geändert :if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width && currentLayoutAttributes.frame.origin.x > prevLayoutAttributes.frame.origin.x) {
Unterstützung der Ausgangsfrage. Ich habe versucht, den Abstand auf 5px auf dem zu bekommen,
UICollectionView
aber das funktioniert nicht, auch mit einemUIEdgeInsetsMake(0,0,0,0)
...In einer UITableView kann ich dies tun, indem ich die x, y-Koordinaten in einer Reihe direkt spezifiziere ...
Hier ist mein UICollectionView-Code:
Update: Mein Problem wurde mit dem folgenden Code behoben.
ViewController.m
quelle
Bei Verwendung eines horizontalen Flusslayouts erhielt ich auch einen Abstand von 10 Punkten zwischen den Zellen. Um den Abstand zu entfernen, musste ich sowohl auf Null setzen
minimumLineSpacing
als auchminimumInterItemSpacing
.Wenn alle Zellen dieselbe Größe haben, ist es einfacher und effizienter, die Eigenschaft direkt im Flow-Layout festzulegen, anstatt Delegate-Methoden zu verwenden.
quelle
minimumInteritemSpacing
. Durch einfaches EinstellenminimumLineSpacing = 0
meines horizontalen Layouts wurde der horizontale Abstand zwischen den Elementen entfernt.Denken Sie daran, dass dies der minimale Zeilenabstand ist , nicht der minimale Abstand zwischen den Elementen oder der Zellenabstand. Weil die Bildlaufrichtung Ihrer collectionView HORIZONTAL ist .
Wenn es vertikal ist, müssen Sie den Zellenraum oder den Zwischenraum für den horizontalen Abstand zwischen den Zellen und den Zeilenabstand für den vertikalen Abstand zwischen den Zellen festlegen.
Objective-C-Version
Schnelle Version:
quelle
Versuchen Sie diesen Code, um sicherzustellen, dass zwischen jedem Element ein Abstand von 5 Pixel liegt:
quelle
Schnelle Version der beliebtesten Antwort. Der Abstand zwischen den Zellen ist gleich
cellSpacing
.quelle
Ich habe eine sehr einfache Möglichkeit gefunden, den Abstand zwischen Zellen oder Zeilen mithilfe von IB zu konfigurieren.
In wählen UICollectionView gerade von Storyboard / Xib Datei und klicken Sie auf Größe Inspector wie in Bild unten angegeben.
Verwenden Sie zum programmgesteuerten Konfigurieren des Speicherplatzes die folgenden Eigenschaften.
1) Zum Einstellen des Abstandes zwischen den Zeilen.
2) Zum Einstellen des Abstands zwischen Elementen / Zellen.
quelle
Bitte beachten Sie den Eigenschaftsnamen MinimumInterItemSpacing . Dies ist der minimale Abstand zwischen den Elementen, nicht der genaue Abstand. Wenn Sie minimalInterItemSpacing auf einen bestimmten Wert festlegen, können Sie sicherstellen, dass der Abstand nicht kleiner als dieser Wert ist. Aber es besteht die Möglichkeit, einen höheren Wert zu erhalten.
Tatsächlich hängt der Abstand zwischen Elementen von mehreren Faktoren ab: itemSize und sectionInset . In der Sammlungsansicht werden die Inhalte basierend auf diesen Werten dynamisch platziert. Sie können also den genauen Abstand nicht gewährleisten. Sie sollten einige Versuche mit SectionInset und MinimumInterItemSpacing durchführen .
quelle
Antwort für Swift 3.0, Xcode 8
1.Stellen Sie sicher, dass Sie den Delegaten für die Sammlungsansicht festlegen
2. Implementieren Sie das UICollectionViewDelegateFlowLayout- Protokoll, nicht UICollectionViewDelegate.
quelle
Einfacher Code für den Abstand
quelle
Die gewählte Antwort (und auch die schnelle Version ) hat ein kleines Problem: Es wird einen großen Abstand auf der rechten Seite geben.
Dies liegt daran, dass das Flusslayout so angepasst wird, dass der Zellenabstand exakt ist und ein Float übrig bleibt .
Meine Lösung besteht darin, den Abschnittseinsatz so zu manipulieren, dass der Abschnitt mittig ausgerichtet ist und der Abstand genau den Angaben entspricht.
In der Abbildung unten beträgt der Abstand zwischen Element und Zeile genau 8pt, während der Abschnitt links und rechts größer als 8pt ist (um ihn mittig auszurichten):
Schneller Code als solcher:
quelle
let n = Int((containerWidth + minItemSpacing)/((itemWidth+minItemSpacing)))
Definieren Sie das
UICollectionViewDelegateFlowLayout
Protokoll in Ihrer Header-Datei.Implementieren Sie die folgende
UICollectionViewDelegateFlowLayout
Protokollmethode:Klicken Sie hier , um die Apple-Dokumentation der
UIEdgeInsetMake
Methode anzuzeigen.quelle
Wenn Sie den Abstand anpassen möchten, ohne die tatsächliche Zellengröße zu berühren, ist dies die Lösung, die für mich am besten funktioniert hat. #xcode 9 # tvOS11 # iOS11 #swift
Ändern Sie in UICollectionViewDelegateFlowLayout die Implementierung der nächsten Methoden. Der Trick besteht darin, dass Sie beide verwenden müssen, und die Dokumentation hat mich nicht wirklich dazu veranlasst, in diese Richtung zu denken. : D.
quelle
Storyboard-Ansatz
Wählen Sie CollectionView in Ihrem Storyboard aus, gehen Sie zum Größeninspektor und legen Sie den Mindestabstand für Zellen und Linien auf 5 fest
Swift 5 programmgesteuert
quelle
Ich verwende Monotouch, daher sind die Namen und der Code etwas unterschiedlich. Sie können dies jedoch tun, indem Sie sicherstellen, dass die Breite der Sammlungsansicht (x * Zellenbreite) + (x-1) * MinimumSpacing mit x = Betrag entspricht von Zellen pro Zeile.
Führen Sie einfach die folgenden Schritte aus, die auf Ihrem MinimumInteritemSpacing und der Breite der Zelle basieren
1) Wir berechnen die Anzahl der Elemente pro Zeile basierend auf der Zellengröße + den aktuellen Einfügungen + dem Mindestabstand
2) Jetzt haben Sie alle Informationen, um die erwartete Breite für die Sammlungsansicht zu berechnen
3) Der Unterschied zwischen der aktuellen Breite und der erwarteten Breite beträgt also
4) Passen Sie nun die Einfügungen an (in diesem Beispiel fügen wir sie rechts hinzu, sodass die linke Position der Sammlungsansicht gleich bleibt
quelle
Ich habe eine horizontale
UICollectionView
und untergeordneteUICollectionViewFlowLayout
. Die Sammlungsansicht verfügt über große Zellen und zeigt jeweils nur eine Zeile an. Die Sammlungsansicht passt zur Breite des Bildschirms.Ich habe die Antwort von iago849 ausprobiert und es hat funktioniert, aber dann habe ich herausgefunden, dass ich seine Antwort nicht einmal brauchte. Aus irgendeinem Grund
minimumInterItemSpacing
bewirkt das Einstellen von nichts. Der Abstand zwischen meinen Elementen / Zellen kann vollständig durch gesteuert werdenminimumLineSpacing
.Ich bin mir nicht sicher, warum es so funktioniert, aber es funktioniert.
quelle
Ich bin auf ein ähnliches Problem wie OP gestoßen. Leider hat die akzeptierte Antwort bei mir nicht funktioniert, da der Inhalt der
collectionView
nicht richtig zentriert wäre. Deshalb habe ich eine andere Lösung gefunden, die nur erfordert, dass alle Elemente incollectionView
der gleichen Breite sind , was in der Frage der Fall zu sein scheint:Dieser Code stellt sicher, dass der von zurückgegebene Wert
...minimumInteritemSpacing...
der genaue Abstand zwischen allen ist,collectionViewCell
und garantiert außerdem, dass die Zellen alle zusammen in der zentriert werdencollectionView
quelle
Die obige Lösung von vojtech-vrbka ist korrekt, löst jedoch eine Warnung aus:
Der folgende Code sollte das Problem beheben:
quelle
Swift 3 Version
Erstellen Sie einfach eine UICollectionViewFlowLayout-Unterklasse und fügen Sie diese Methode ein.
quelle
Ich habe die Antwort von iago849 ausprobiert und es hat funktioniert.
Swift 4
Hier ist der Link für das Github-Projekt. https://github.com/vishalwaka/MultiTags
quelle
Frühere Versionen funktionierten nicht wirklich mit Abschnitten> 1. Meine Lösung wurde also hier gefunden: https://codentrick.com/create-a-tag-flow-layout-with-uicollectionview/ . Für die Faulen:
quelle
Ich habe ein Problem mit der akzeptierten Antwort, daher habe ich sie aktualisiert. Dies funktioniert für mich:
.h
.m
quelle
Meine Lösung im
Swift 3
Zelllinienabstand wie bei Instagram:So erkennen Sie das Gerät programmgesteuert: https://stackoverflow.com/a/26962452/6013170
quelle
Wenn Sie eine horizontale Sammlungsansicht erstellen, müssen Sie die Eigenschaft festlegen, um Platz zwischen den Zellen zu schaffen
minimumLineSpacing
.quelle
Versuchen Sie, mit dieser Methode herumzuspielen:
quelle