UICollectionViewDiffableDataSource ChatLayout ist eine alternative Lösung für MessageKit. Es verwendet benutzerdefinierte UICollectionViewLayout , um Ihnen die vollständige Kontrolle über die Präsentation sowie alle in UICollectionView verfügbaren Tools zu erhalten.
UICollectionView während der Aktualisierungen. ChatLayout ist der benutzerdefinierte UICollectionViewLayout , also:
Sie müssen keine benutzerdefinierten UIViewController oder UICollectionView erweitern oder außer Kraft setzen. Sie müssen sie selbst instanziieren und sie so verwenden, wie Sie möchten.
ChatLayout stützt sich weder auf modifizierte UICollectionViewFlowLayout noch dreht es Ihre UICollectionView auf den Kopf. Dies bedeutet, dass Sie Ihre Ansichten so verwenden können, als wären sie regelmäßige Zellen innerhalb von UICollectionView . Sie können von der Verwendung der Standard UIKit -Implementierungen von adjustedContextInsets (und anderen) profitieren, da Ihr Ansichtscontroller ein normaler Ansichts -Controller ohne Hacks oder Tricks ist.
ChatLayout müssen Sie nicht alle Zellengrößen berechnen, bevor sie sie auf dem Bildschirm rendern. Sie können automatische Einschränkungen vollständig verwenden und sich darauf verlassen, dass die richtige Größe in der Laufzeit berechnet wird. ChatLayout wie jedes andere UICollectionViewLayout wird davon profitieren, dass Sie die geschätzten Größen Ihrer Zellen bereitstellen, da Sie eine bessere Leistung erzielen können.
ChatLayout erzwingt Sie nicht, ein bestimmtes Datenmodell zu verwenden. Sie können Ihre Nachrichten speichern und UICollectionView so aktualisieren, wie Sie möchten. Das einzige, was Sie brauchen, ist, die natürlichen Grenzen zu respektieren, die UICollectionView haben und UICollectionViewDataSource korrekt implementiert. Die Beispiel -App verwendet DifferenceKit, um Änderungen im Datenmodell zu verarbeiten.
ChatLayout erzwingt Sie nicht, um spezielle UIView zu verwenden, um Ihre Sammelzellen zu erstellen. Sie können sie so erstellen, wie Sie möchten. Es kann jeder UICollectionViewCell oder UICollectionReusableView sein. Es gibt einige generische UIView mit der Bibliothek, die Ihnen helfen können, sie schneller zu bauen. Sie müssen sie jedoch nicht verwenden.
ChatLayout handelt nicht mit dem Tastatur -Erscheinungsverhalten. Sie müssen das selbst von Grund auf neu implementieren oder die Bibliothek verwenden, die Sie bereits in Ihrem Projekt verwenden. Es gibt Ihnen die volle Kontrolle über die Tastaturpräsentation. Das einzige, was Sie tun müssen, ist, die contentInsets Ihres UICollectionView zu aktualisieren.
ChatLayout bietet Ihnen keine Eingabesteuerung. Sie können jeden verwenden, den Sie mögen, und es so anpassen, wie Sie möchten. Die Beispiel -App verwendet beispielsweise InputBarAccessoryView.
Um das Beispielprojekt auszuführen, klonen Sie das Repo und führen Sie zuerst pod install aus dem Beispielverzeichnis aus.
ChatLayout ist über Cocoapods, Karthago und Swiftpm erhältlich. In der Example -App finden Sie die Verwendungsdetails.
Wenn Sie Cocoapods verwenden, können Sie das gesamte Paket mit pod 'ChatLayout' installieren. Wenn Sie nicht die zusätzlichen Komponenten benötigen, können Sie nur das Layout selbst mithilfe von pod 'ChatLayout/Core' installieren
ChatLayout ist in aktiver Entwicklung und wir begrüßen Ihre Beiträge.
Wenn Sie zu diesem Repo beitragen möchten, lesen Sie bitte die Beitragsrichtlinien.
UICollectionViewDiffableDataSource ChatLayout kann alle Aktualisierungsbefehle verarbeiten, die Sie an Ihren UICollectionView senden, sodass Sie auch UICollectionViewDiffableDataSource verwenden können.
Es kann verlockend sein und es kann so aussehen, als ob es der richtige Weg ist, aber verwenden Sie keine zusätzlichen Ansichten, um Ihre Nachrichten oder Gruppen von ihnen zu dekorieren. UICollectionView verarbeitet sie in einer anderen Reihenfolge: UICollectionViewCell zuerst und erst nach Schalter zu UICollectionReusableView s. Sie werden höchstwahrscheinlich während der Animation ein unerwartetes Verhalten ausgesetzt sein. Ich rate Ihnen dringend, Abschnitte überhaupt zu verwenden.
ChatLayout kann zusammen mit Textur verwendet werden, um die automatische Layout-Leistung zu verbessern. Denken Sie jedoch daran, dass es standardmäßig mit UICollectionViewFlowlayout ausschließlich mit UICollectionViewFlowLayout zusammenarbeitet. Siehe Problem. Sie müssen ChatLayoutDelegate selbst implementieren und die Knotengröße manuell verbreiten.
Wenn Sie während der Updates eine seltsame oder unerwartete Animation sehen, überprüfen Sie Ihr Datenmodell und die Befehle, die Sie an die performBatchUpdates von UICollectionView senden . Besonders wenn Sie einige Differenzalgorithmen wie Differenzkit verwenden. Es ist sehr möglich, dass Sie Befehle löschen/einfügen, wenn Sie erwarten, dass Sie neu geladen werden. Der einfachste Weg, dies zu überprüfen, ist das Hinzufügen von print("(updateItems)") in ChatLayout.prepare(forCollectionViewUpdates:) Methode. ChatLayout weiß nicht, was Sie erwartet haben. Es verarbeitet nur Ihre Änderungen gemäß den Befehlen, die es erhalten hat.
Klebrige Header oder Fußzeilen werden nicht durch ChatLayout unterstützt, aber Ihre Beiträge sind willkommen.
ChatLayout wird unter der MIT -Lizenz verteilt.
ChatLayout wird für Ihre kostenlose Verwendung von iS-Basis bereitgestellt. Wir machen keine Garantien, Versprechen oder Entschuldigungen. Vorbehaltsentwickler.
Englisch:
Russisch:
Wenn Sie diese Bibliothek nützlich finden und insbesondere wenn Sie sie in der Produktion verwenden, sollten Sie dieses Projekt hier sponsern. Ich arbeite in meiner Freizeit an ChatLayout , und Ihr Sponsoring würde mir helfen, mich weiter zu entwickeln und zur Open -Source -Community beizutragen. Ihre Unterstützung wird es mir ermöglichen, diesem Projekt mehr Zeit und Ressourcen zu widmen, um sicherzustellen, dass es für die kommenden Jahre auf dem neuesten Stand und relevant ist.
Vielen Dank für Ihre Überlegung!
Evgeny Kazaev, [email protected]. Twitter Ekazaev
Gerne beantworte ich alle Fragen, die Sie möglicherweise haben. Erstellen Sie einfach ein neues Problem.