UICollectionViewDiffableDataSourceについてChatLayout 、MessageKitの代替ソリューションです。 Custom UICollectionViewLayoutを使用して、 UICollectionViewで利用可能なすべてのツールをプレゼンテーションとすべてのツールを完全に制御できます。
UICollectionViewの上部または下部に、最後の可視アイテムのコンテンツを保持します。 ChatLayoutはカスタムUICollectionViewLayoutです。
カスタムUIViewControllerまたはUICollectionView拡張またはオーバーライドする必要はありません。自分でインスタンス化し、好きなように使用する必要があります。
ChatLayout 、変更されたUICollectionViewFlowLayoutに依存せず、 UICollectionView逆さまに回転させません。これは、 UICollectionView内の通常のセルであるかのように、ビューを使用できることを意味します。ビューコントローラーはハッキングやトリックのない通常のビューコントローラーであるため、 adjustedContextInsets (およびその他)のデフォルトのUIKit実装を使用することで利益を得ることができます。
ChatLayout 、画面上でそれらをレンダリングする前に、すべてのセルサイズを計算する必要はありません。自動レイアウト制約を完全に使用し、ランタイムで正しいサイズが計算されるという事実に依存することができます。ただし、他のUICollectionViewLayoutと同様に、 ChatLayout 、パフォーマンスを向上させることができるため、セルの推定サイズを提供することから利益を得ます。
ChatLayout 、特定のデータモデルを使用することを強制しません。メッセージを保存して、 UICollectionView好きなように更新できます。必要なのは、 UICollectionView持っている自然境界を尊重し、 UICollectionViewDataSource正しく実装することです。この例では、DifferenceKitを使用してデータモデルの変更を処理します。
ChatLayout 、特定のUIView sを使用してコレクションセルを作成することを強制しません。好きなように作成できます。任意のUICollectionViewCellまたはUICollectionReusableViewにすることができます。ライブラリにバンドルされた一般的なUIViewがいくつかあり、それらをより速く構築するのに役立ちます。ただし、それらを使用する必要はありません。
ChatLayout 、キーボードの外観の動作を処理しません。ゼロから自分で実装するか、プロジェクトで既に使用しているライブラリを使用する必要があります。キーボードのプレゼンテーションを完全に制御できます。あなたがしなければならない唯一のことは、 UICollectionViewのcontentInsetsを更新することです。
ChatLayout入力コントロールを提供しません。好きなものを使用して、好きなようにカスタマイズできます。たとえば、アプリの例では、inputbaraccessoryviewを使用します。
プロジェクトのサンプルを実行するには、リポジトリをクローンし、最初にディレクトリの例からpod installを実行します。
ChatLayout 、Cocoapods、Carthage、Swiftpmから入手できます。使用状況の詳細については、 Exampleアプリを参照してください。
Cocoapodsを使用している場合はpod 'ChatLayout'を使用してパッケージ全体をインストールできます。提供された追加コンポーネントが必要な場合は、 pod 'ChatLayout/Core'を使用してレイアウト自体のみをインストールできます。
ChatLayoutは積極的な開発中であり、ご貢献を歓迎します。
このレポに貢献したい場合は、貢献ガイドラインをお読みください。
UICollectionViewDiffableDataSourceについてChatLayout 、 UICollectionViewに送信する任意の更新コマンドを処理できます。これにより、 UICollectionViewDiffableDataSourceも使用できます。
それは魅力的である可能性があり、それは正しい方法のように見えるかもしれませんが、補足的な見解を使用してメッセージやそれらのグループを飾ることはありません。 UICollectionView 、それらを別の順序で処理します: UICollectionViewCell s最初とUICollectionReusableView sに切り替えた後のみ。アニメーション中に予想外の動作に直面する可能性が高いでしょう。セクションを使用することを強くお勧めします。
ChatLayoutテクスチャと一緒に使用して、自動レイアウトパフォーマンスを向上させることができます。ただし、デフォルトのラッパーは、 UICollectionViewFlowLayoutでのみ動作するように強調されていることに留意してください。問題を参照してください。 ChatLayoutDelegateを自分で実装し、ノードサイズを手動で伝播する必要があります。
更新中に奇妙なアニメーションまたは予期しないアニメーションが表示されている場合は、データモデルとUICollectionViewのperformBatchUpdatesに送信するコマンドを確認してください。特に、DifferenceKitなどの拡散アルゴリズムを使用している場合。リロードが表示されると予想されるときに、コマンドを削除/挿入することを送信する可能性が非常に高くなります。それをチェックする最も簡単な方法はprint("(updateItems)")をChatLayout.prepare(forCollectionViewUpdates:)メソッドに追加することです。 ChatLayout 、あなたが何を期待していたかを知りません。受け取ったコマンドに従って変更を処理するだけです。
スティッキーヘッダーやフッターはChatLayoutによってサポートされていませんが、貢献は大歓迎です。
ChatLayoutはMITライセンスの下で配布されます。
ChatLayout 、AS-ISベースで使用するために、無料で提供されます。保証、約束、謝罪はしません。警告開発者。
英語:
ロシア:
このライブラリが役立つ場合、特に生産でそれを使用している場合は、こちらのスポンサーになっていることを検討してください。私は暇なときにChatLayoutに取り組んでおり、あなたのスポンサーシップは、オープンソースコミュニティの開発と貢献を継続するのに役立ちます。あなたのサポートにより、このプロジェクトにより多くの時間とリソースを捧げ、今後数年間最新で関連性を維持することができます。
ご検討いただきありがとうございます!
Evgeny Kazaev、[email protected]。 Twitter ekazaev
あなたが持っているかもしれない質問に答えてうれしいです。新しい問題を作成するだけです。