UICollectionViewDiffableDataSourceChatLayout是MessageKit的替代解決方案。它使用自定義的UICollectionViewLayout來為您提供對演示文稿以及UICollectionView中所有可用工具的完整控制。
UICollectionView的頂部或底部。 ChatLayout是自定義UICollectionViewLayout ,所以:
您不必擴展或覆蓋任何自定義的UIViewController或UICollectionView 。您需要自己實例化,並按照自己喜歡的方式使用它們。
ChatLayout不依賴於修改後的UICollectionViewFlowLayout ,也不旋轉您的UICollectionView上下向下。這意味著您可以使用視圖,就好像它們是UICollectionView中的常規單元格一樣。您可以從使用adjustedContextInsets (和其他)的默認UIKit實現中受益,因為您的視圖控制器是普通的視圖控制器,而無需任何黑客攻擊或技巧。
ChatLayout不需要您在屏幕上渲染所有單元格大小。您可以充分使用自動劃分約束,並依賴於在運行時計算正確大小的事實。但是, ChatLayout作為任何其他UICollectionViewLayout都會從您那裡受益,從而提供細胞的估計尺寸,因為這將使您獲得更好的性能。
ChatLayout不會強制您使用任何特定的數據模型。您可以以自己喜歡的方式存儲消息並更新UICollectionView 。您唯一需要的是尊重UICollectionView的自然邊界並正確實現UICollectionViewDataSource 。該示例應用程序使用差異化值來處理數據模型中的更改。
ChatLayout不會強制您使用任何特定的UIView s來創建收集單元。您可以按照自己喜歡的方式創建它們。它可以是任何UICollectionViewCell或UICollectionReusableView 。有一些與圖書館捆綁在一起的通用UIView S可以幫助您更快地構建它們。但是,您不必使用它們。
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命令。尤其是您使用的是一些差異算法(例如差異化算法)。當您期望看到重新加載時,很可能會發送刪除/插入命令。檢查它的最簡單方法是將print("(updateItems)")添加到ChatLayout.prepare(forCollectionViewUpdates:)方法中。 ChatLayout不知道您期望看到什麼。它只是根據收到的命令來處理您的更改。
ChatLayout不支持粘性標頭或頁腳,但歡迎您的貢獻。
ChatLayout是根據MIT許可證分發的。
ChatLayout是為您提供的,以您的使用方式免費使用。我們沒有保證,承諾或道歉。警告開發人員。
英語:
俄語:
如果您發現此庫有用,尤其是如果您在生產中使用它,請考慮在此處贊助該項目。我在業餘時間進行ChatLayout工作,您的讚助將幫助我繼續發展並為開源社區做出貢獻。您的支持將使我能夠將更多的時間和資源用於該項目,以確保其在未來幾年中保持最新和相關。
謝謝您的考慮!
Evgeny Kazaev,[email protected]。 Twitter Ekazaev
我很高興回答您可能遇到的任何問題。只需創建一個新問題即可。