UICollectionViewDiffableDataSource ChatLayout es una solución alternativa a MessageKit. Utiliza UICollectionViewLayout personalizado para proporcionarle un control completo sobre la presentación, así como todas las herramientas disponibles en UICollectionView .
UICollectionView durante las actualizaciones. ChatLayout es el UICollectionViewLayout personalizado, entonces:
No tiene que extender ni anular ningún UIViewController personalizado o UICollectionView . Necesitas instanciarlos tú mismo y usarlos como quieras.
ChatLayout no se basa en UICollectionViewFlowLayout modificado ni gira su UICollectionView al revés. Esto significa que puede usar sus puntos de vista como si fueran celdas regulares dentro de UICollectionView . Puede beneficiarse del uso de las implementaciones UIKit predeterminadas de adjustedContextInsets (y otros) porque su controlador de vista es un controlador de vista normal sin trucos o trucos.
ChatLayout no requiere que calcules todos los tamaños de las celdas antes de que los convierte en la pantalla. Puede usar completamente las restricciones de capas automáticas y confiar en el hecho de que el tamaño correcto se calculará en el tiempo de ejecución. Sin embargo, ChatLayout como cualquier otro UICollectionViewLayout se beneficiará de usted proporcionando los tamaños estimados de sus celdas, ya que le permitirá obtener un mejor rendimiento.
ChatLayout no lo hace cumplir para que use ningún modelo de datos específico. Puede almacenar sus mensajes y actualizar UICollectionView de la manera que desee. Lo único que necesita es respetar los límites naturales que UICollectionView tiene e implementar correctamente UICollectionViewDataSource . La aplicación Ejemplo usa DiferingKit para procesar cambios en el modelo de datos.
ChatLayout no lo hace cumplir para que use UIView S específico para crear sus celdas de colección. Puedes crearlos como quieras. Puede ser cualquier UICollectionViewCell o UICollectionReusableView . Hay algunos UIView genéricos que se incluyen con la biblioteca que pueden ayudarlo a construirlos más rápido. Sin embargo, no tienes que usarlos.
ChatLayout no maneja el comportamiento de apariencia del teclado. Debe implementarlo usted mismo desde cero o usar la biblioteca que ya está utilizando en su proyecto. Le brinda control total sobre la presentación del teclado. Lo único que debe hacer es actualizar los contentInsets de su UICollectionView .
ChatLayout no le proporciona ningún control de entrada. Puede usar cualquier persona que desee y personalizarlo como desee. La aplicación de ejemplo, por ejemplo, usa InputBarAccessoryView.
Para ejecutar el proyecto de ejemplo, clonar el repositorio y ejecutar pod install desde el directorio de ejemplo.
ChatLayout está disponible a través de Cocoapods, Cartago y Swiftpm. Vea la aplicación Example para los detalles de uso.
Si está utilizando Cocoapods, puede instalar el paquete completo con pod 'ChatLayout' . Si no necesita los componentes adicionales proporcionados, solo puede instalar el diseño en sí con pod 'ChatLayout/Core'
ChatLayout está en desarrollo activo, y damos la bienvenida a sus contribuciones.
Si desea contribuir a este repositorio, lea las pautas de contribución.
UICollectionViewDiffableDataSource ChatLayout puede procesar cualquier comando de actualización que envíe a su UICollectionView , para que también pueda usar UICollectionViewDiffableDataSource .
Puede ser tentador y puede parecer que es el camino correcto, pero no use vistas complementarias para decorar sus mensajes o grupos de ellos. UICollectionView los procesa en un orden diferente: UICollectionViewCell S primero y solo después de cambiar a UICollectionReusableView s. Lo más probable es que enfrente algún comportamiento inesperado durante la animación. Te aconsejo firmemente que no use secciones.
ChatLayout se puede usar junto con la textura para mejorar el rendimiento de la capa automática. Pero tenga en cuenta que su envoltura predeterminada está codificada para trabajar exclusivamente con UICollectionViewFlowLayout . Ver problema. Tendrá que implementar ChatLayoutDelegate usted mismo y propagar el tamaño del nodo manualmente.
Si ve una animación extraña o inesperada durante las actualizaciones, verifique su modelo de datos y los comandos que envía a la performBatchUpdates de UICollectionView . Especialmente si está utilizando algunos algoritmos diferentes como DiferingKit. Es muy posible que esté enviando comandos Eliminar/Insertar cuando espera ver la recarga. La forma más fácil de verificarlo es agregando print("(updateItems)") en ChatLayout.prepare(forCollectionViewUpdates:) ChatLayout no sabe lo que esperabas ver. Simplemente procesa sus cambios de acuerdo con los comandos que ha recibido.
Los encabezados pegajosos o los pies no son compatibles con ChatLayout , pero sus contribuciones son bienvenidas.
ChatLayout se distribuye bajo la licencia MIT.
ChatLayout se proporciona para su uso, gratuito, según lo es. No hacemos garantías, promesas o disculpas. Desarrollador de advertencia.
Inglés:
Ruso:
Si encuentra útil esta biblioteca, y especialmente si la está utilizando en producción, considere patrocinar este proyecto aquí. Trabajo en ChatLayout en mi tiempo libre, y su patrocinio me ayudaría a continuar desarrollando y contribuyendo a la comunidad de código abierto. Su apoyo me permitirá dedicar más tiempo y recursos a este proyecto, asegurando que permanezca actualizado y relevante en los próximos años.
¡Gracias por su consideración!
Evgeny Kazaev, [email protected]. Twitter Ekazaev
Me complace responder cualquier pregunta que pueda tener. Simplemente cree un nuevo problema.