Platzieren von zwei Abschnitten in einer UICollectionView nebeneinander

9

Ich habe eine CollectionView mit sechs Abschnitten.

Die ersten Abschnitte sind als Zeilen organisiert. Abschnitt 2 & amp; 3 ist, wo die Dinge schwierig werden. Ich muss zwei Abschnitte direkt nebeneinander platzieren .

[................ Abschnitt 1 ..............] // ein Abschnitt mit ein paar Zeilen
[... Abschnitt 2 ...] [... Abschnitt 3 ...] // zwei Abschnitte unter dem ersten

Ich kann den zweiten Abschnitt nicht in zwei Spalten teilen, da diese unterschiedlich mit verschiedenen Zellen gefüllt sind.
Da ich weiß, dass das Fließlayout immer einen Abschnitt von Grenzen zu Grenzen füllt, könnte ich einen solchen Effekt nur fälschen, indem ich zwei Zellen nebeneinander platziere, was gut ist, aber ich füge Zellen hinzu und kann nur eine unter der anderen mit einer ganzen Zahl platzieren Diese wird jedes Mal erhöht, wenn ich eine neue Zelle in cellForItemAtIndexPath erstelle: und benutze sie, um sie mit der Höhe der Zelle zu multiplizieren.

Das einzige Problem, dem ich gegenüberstehe, ist, wenn ich einige Zellen wiederverwende, funktioniert der Integer-Variable-Hack nicht mehr.

Gibt es einen besseren Weg, neben einem benutzerdefinierten Layout, das auch nicht den gewünschten Effekt hat, zwei Abschnitte nebeneinander zu platzieren?

Danke im Voraus

    
maxlxb 29.04.2015, 13:43
quelle

1 Antwort

1

Sie müssen nicht unbedingt ein benutzerdefiniertes Layout schreiben, sondern können einfach UICollectionViewFlowLayout ableiten und einige Schlüsselmethoden außer Kraft setzen, die die Positionierung des Frames bestimmen, nämlich layoutAttributesForElementsInRect: / layoutAttributesForItemAtIndexPath: , wo Sie den Abschnitt überprüfen und bestimmen können Positionen.

Der Code selbst wäre wahrscheinlich relativ einfach, etwa wie folgt:

%Vor%

Offensichtlich ist das Pseudo-Code und ich habe das nicht durch einen Compiler durchgeführt, aber die wesentlichen Schritte sind:

  • haben eine Guard-Anweisung, die das Vorhandensein der Sammlungsansicht sicherstellt, so dass Sie die folgenden Variablen definieren können: halfWidth und fullWidth (wird später verwendet)
  • behalte einen laufenden Zähler deiner y -Position
  • Überprüfen Sie den Abschnitt Index und Position entsprechend

Der beste Weg, dies zu erreichen, ist, zu überschreiben und ein Array mit Layout zu berechnen Attribute (und speichern Sie das als Instanzvariable). Dann geben Sie in layoutAttributesForItemAtIndexPath: und dergleichen einfach das Objekt am Index in diesem Array zurück (oder wenn der Index aus irgendeinem Grund außerhalb der Grenzen liegt, geben Sie super.layoutAttributesForItem(at: indexPath) zurück.

Das ist die Schönheit von UICollectionViewFlowLayout , die meisten schweren Übungen werden für Sie erledigt und Sie können einige einfache Methoden untergliedern, um das gewünschte Verhalten zu erzielen. Die Alternative ist ein ausgewachsenes benutzerdefiniertes Layout, das meiner Meinung nach selten gerechtfertigt ist, es sei denn, Sie haben ein verrücktes Verhalten. In diesem Fall sollten Sie Gespräche mit Ihren Designern über die Komplexität dessen führen, was sie machen.

    
barndog 24.01.2018, 10:09
quelle