Probleme beim erneuten Öffnen der Collection View-Zelle mit benutzerdefinierten Dimensionen

9

Ich möchte Zellen in einer Sammlungsansicht mit benutzerdefinierter Größe für jede Zelle neu anordnen In jeder Zelle der Collection-Ansicht gibt es ein Label mit einem Wort.
Ich setze die Dimension jeder Zelle mit diesem Code:

%Vor%

Ich ordne die Sammlungsansicht mit diesem Code neu an:

%Vor%

Die Ansicht sieht folgendermaßen aus:

Das Problem besteht darin, dass die Zellen während der Neuanordnung die Dimensionen der ursprünglichen Zelle in einem Indexpfad beibehalten, so dass die Ansicht während der Neuordnung folgendermaßen aussieht: Im Moment habe ich das Problem behoben, Daten am Ende der Neuordnung neu zu laden, um die richtigen Dimensionen neu zu berechnen. Wie kann ich die richtigen Abmessungen für die Zellen auch während der interaktiven Bewegung beibehalten und benutzerdefinierte Zellen neu anordnen?

    
ale00 25.09.2016, 20:12
quelle

1 Antwort

3

Das hat mich die ganze Woche gestört, also habe ich mich heute Abend hingesetzt, um eine Lösung zu finden. Ich denke, was Sie brauchen, ist ein benutzerdefinierter Layout-Manager für Ihre Sammlung Ansicht, die dynamisch das Layout für jede Zelle anpassen kann, wie die Reihenfolge geändert wird.

Der folgende Code produziert offensichtlich etwas viel gröberes als Ihr Layout oben, aber erreicht grundsätzlich das von Ihnen gewünschte Verhalten: Entscheidendes Umstellen auf das neue Layout, wenn die Zellen neu geordnet werden, geschieht "sofort" ohne zwischenzeitliche Anpassungen.

Der Schlüssel dazu ist die Funktion didSet in der sourceData -Variable des View-Controllers. Wenn der Wert dieses Arrays geändert wird (durch Drücken der Sortierschaltfläche - meine grobe Annäherung an Ihren Gestenerkenner), wird automatisch eine Neuberechnung der erforderlichen Zellendimensionen ausgelöst, die dann auch das Layout auslöst und neu berechnet und die Sammlungsansicht neu lädt die Daten.

Wenn Sie Fragen dazu haben, lassen Sie es mich wissen. Ich hoffe es hilft!

UPDATE: OK, ich verstehe, was Sie jetzt versuchen, und ich denke, dass der angehängte aktualisierte Code Sie dorthin bringt. Anstatt die integrierten Interaktionsmethoden zu verwenden, denke ich, dass es einfacher ist, wenn ich einen benutzerdefinierten Layout-Manager für die Verwendung der Delegierung implementiert habe: Wenn der Pan-Gestenerkenner eine Zelle auswählt, erstellen wir eine Unteransicht basierend auf dem Wort, das sich mit verschiebt Geste. Gleichzeitig entfernen wir im Hintergrund das Wort aus der Datenquelle und aktualisieren das Layout. Wenn der Benutzer einen Speicherort zum Platzieren des Worts auswählt, kehren wir diesen Prozess um und weisen den Delegierten an, ein Wort in die Datenquelle einzufügen und das Layout zu aktualisieren. Wenn der Benutzer das Wort außerhalb der Sammlungsansicht oder an einen ungültigen Ort zieht, wird das Wort einfach an die Stelle zurückgesetzt, an der es begonnen wurde (verwenden Sie die schlaue Technik, den ursprünglichen Index als Etikett zu speichern).

Hoffe, dass dir das hilft!

[Text mit freundlicher Genehmigung von Wikipedia]

%Vor%     
Sparky 29.09.2016, 21:42
quelle