UICollectionViewDiffableDataSource ChatLayout est une solution alternative à MessageKit. Il utilise UICollectionViewLayout personnalisé pour vous fournir un contrôle total sur la présentation ainsi que tous les outils disponibles dans UICollectionView .
UICollectionView lors des mises à jour. ChatLayout est la personnalité UICollectionViewLayout , donc:
Vous n'avez pas à étendre ou à remplacer aucun UIViewController personnalisé ou UICollectionView . Vous devez les instancier vous-même et les utiliser comme vous le souhaitez.
ChatLayout ne dépend pas de UICollectionViewFlowLayout modifié et il ne fait pas de pile à l'envers votre UICollectionView . Cela signifie que vous pouvez utiliser vos vues comme si ce serait des cellules régulières dans UICollectionView . Vous pouvez bénéficier de l'utilisation des implémentations UIKit par défaut de adjustedContextInsets (et autres) car votre contrôleur de vue est un contrôleur de vue normal sans hacks ni astuces.
ChatLayout ne vous oblige pas à calculer toutes les tailles de cellules avant de les rendre à l'écran. Vous pouvez utiliser entièrement les contraintes de relais automatique et vous appuyer sur le fait que la taille correcte sera calculée dans le temps d'exécution. Cependant, ChatLayout comme tout autre UICollectionViewLayout bénéficiera de vous en fournissant les tailles estimées de vos cellules car cela vous permettra d'obtenir de meilleures performances.
ChatLayout ne vous applique pas d'utiliser un modèle de données spécifique. Vous pouvez stocker vos messages et mettre à jour UICollectionView comme vous le souhaitez. La seule chose dont vous avez besoin est de respecter les limites naturelles que UICollectionView ont et implémenter correctement UICollectionViewDataSource . L'exemple d'application utilise la différence pour traiter les modifications du modèle de données.
ChatLayout ne vous applique pas d'utiliser des UIView spécifiques pour créer vos cellules de collection. Vous pouvez les créer comme vous le souhaitez. Il peut s'agir de n'importe quelle UICollectionViewCell ou UICollectionReusableView . Il y a des UIView S génériques avec la bibliothèque qui peuvent vous aider à les construire plus rapidement. Cependant, vous n'avez pas à les utiliser.
ChatLayout ne gére pas le comportement d'apparence du clavier. Vous devez l'implémenter vous-même à partir de zéro ou utiliser la bibliothèque que vous utilisez déjà dans votre projet. Il vous donne un contrôle total sur la présentation du clavier. La seule chose que vous devez faire est de mettre à jour les contentInsets de votre UICollectionView .
ChatLayout ne vous fournit aucun contrôle des entrées. Vous pouvez utiliser n'importe qui que vous aimez et le personnaliser comme vous le souhaitez. L'exemple d'application par instance utilise InputBarAccessoryView.
Pour exécuter l'exemple de projet, clonez le repo et exécutez d'abord pod install à partir de l'exemple du répertoire.
ChatLayout est disponible via Cocoapods, Carthage et SwiftPM. Voir l' Example d'application pour les détails d'utilisation.
Si vous utilisez des cocoapodes, vous pouvez installer l'ensemble du package à l'aide de pod 'ChatLayout' . Si vous n'avez pas besoin des composants supplémentaires fournis, vous ne pouvez installer que la disposition elle-même à l'aide pod 'ChatLayout/Core'
ChatLayout est en développement actif et nous nous félicitons de vos contributions.
Si vous souhaitez contribuer à ce dépôt, veuillez lire les directives de contribution.
UICollectionViewDiffableDataSource ChatLayout peut traiter toutes les commandes de mise à jour que vous envoyez à votre UICollectionView , vous pouvez donc également utiliser UICollectionViewDiffableDataSource .
Il peut être tentant et il peut sembler que c'est la bonne voie à suivre, mais n'utilisez pas de vues supplémentaires pour décorer vos messages ou groupes. UICollectionView les traite dans un ordre différent: UICollectionViewCell s en premier et seulement après passer à UICollectionReusableView S. Vous ferez probablement face à un comportement inattendu pendant l'animation. Je vous conseille fortement de l'utilisation des sections.
ChatLayout peut être utilisé avec la texture pour améliorer les performances de la remise automatique. Mais gardez à l'esprit que son emballage par défaut est codé en dur pour fonctionner exclusivement avec UICollectionViewFlowLayout . Voir le problème. Vous devrez implémenter ChatLayoutDelegate vous-même et propager la taille du nœud manuellement.
Si vous voyez une animation étrange ou inattendue pendant les mises à jour, vérifiez votre modèle de données et les commandes que vous envoyez auxdis performBatchUpdates de UICollectionView . Surtout si vous utilisez des algorithmes de difficulté comme la différence. Il est très possible que vous envoyiez des commandes de suppression / insérer lorsque vous vous attendez à voir un rechargement. La façon la plus simple de le vérifier est en ajoutant print("(updateItems)") dans ChatLayout.prepare(forCollectionViewUpdates:) Méthode. ChatLayout ne sait pas ce que vous attendez de voir. Il traite simplement vos modifications en fonction des commandes qu'il a reçues.
Les en-têtes ou pieds de page collants ne sont pas pris en charge par ChatLayout , mais vos contributions sont les bienvenues.
ChatLayout est distribué sous la licence du MIT.
ChatLayout est fourni pour votre utilisation, gratuitement, sur une base tel quel. Nous ne faisons aucune garantie, promesses ou excuses. Développeur de mise en garde.
Anglais:
Russe:
Si vous trouvez cette bibliothèque utile, et surtout si vous l'utilisez en production, envisagez de parrainer ce projet ici. Je travaille sur ChatLayout pendant mon temps libre, et votre parrainage m'aiderait à continuer à développer et à contribuer à la communauté open source. Votre soutien me permettra de consacrer plus de temps et de ressources à ce projet, garantissant qu'il reste à jour et pertinent pour les années à venir.
Merci pour votre considération!
Evgeny Kazaev, [email protected]. Twitter Ekazaev
Je suis heureux de répondre à toutes les questions que vous pourriez avoir. Créez simplement un nouveau problème.