UICollectionViewDiffableDataSource ChatLayout é uma solução alternativa para o MessageKit. Ele usa UICollectionViewLayout personalizado para fornecer controle total sobre a apresentação, bem como todas as ferramentas disponíveis no UICollectionView .
UICollectionView durante as atualizações. ChatLayout é o UICollectionViewLayout personalizado, então:
Você não precisa estender ou substituir qualquer UIViewController personalizado ou UICollectionView . Você precisa instanciá -los e usá -los da maneira que você gosta.
ChatLayout não depende do UICollectionViewFlowLayout MODIFICADO, nem gira seu UICollectionView de cabeça para baixo. Isso significa que você pode usar suas visualizações como se elas fossem células regulares no UICollectionView . Você pode se beneficiar do uso das implementações UIKit padrão do adjustedContextInsets (e outros), porque seu controlador de exibição é um controlador de exibição normal sem hacks ou truques.
ChatLayout não exige que você calcule todos os tamanhos das células antes que ela os renderize na tela. Você pode usar completamente as restrições de layout automático e confiar no fato de que o tamanho correto será calculado no tempo de execução. No entanto, ChatLayout como qualquer outro UICollectionViewLayout se beneficiará de você fornecer os tamanhos estimados de suas células, pois isso permitirá que você obtenha um melhor desempenho.
ChatLayout não aplica que você use nenhum modelo de dados específico. Você pode armazenar suas mensagens e atualizar UICollectionView da maneira que quiser. A única coisa que você precisa é respeitar os limites naturais que UICollectionView tem e implementar corretamente UICollectionViewDataSource . O aplicativo de exemplo usa o diferençakit para processar alterações no modelo de dados.
ChatLayout não aplica que você use nenhum UIView s específico para criar suas células de coleção. Você pode criá -los da maneira que você gosta. Pode ser qualquer UICollectionViewCell ou UICollectionReusableView . Existem alguns UIView s genéricos com a biblioteca que podem ajudá -lo a construí -los mais rapidamente. No entanto, você não precisa usá -los.
ChatLayout não lida com o comportamento da aparência do teclado. Você precisa implementar você mesmo do zero ou usar a biblioteca que já está usando em seu projeto. Ele fornece controle total sobre a apresentação do teclado. A única coisa que você precisa fazer é atualizar os contentInsets do seu UICollectionView .
ChatLayout não fornece nenhum controle de entrada. Você pode usar qualquer pessoa de quem quiser e personalizá -lo da maneira que quiser. O aplicativo Exemplo, por exemplo, usa o InputBarAccessoryView.
Para executar o projeto de exemplo, clone o repo e execute pod install no diretório Exemplo primeiro.
ChatLayout está disponível através de Cocoapods, Cartago e Swiftpm. Veja o aplicativo Example para os detalhes de uso.
Se você estiver usando Cocoapods, poderá instalar o pacote inteiro usando pod 'ChatLayout' . Se você não precisar dos componentes adicionais fornecidos, poderá instalar apenas o layout usando pod 'ChatLayout/Core'
ChatLayout está em desenvolvimento ativo e recebemos suas contribuições.
Se você quiser contribuir com este repositório, leia as diretrizes de contribuição.
UICollectionViewDiffableDataSource ChatLayout pode processar todos os comandos de atualização que você enviar para o seu UICollectionView , para que você possa usar UICollectionViewDiffableDataSource também.
Pode ser tentador e pode parecer que é o caminho certo a seguir, mas não use vistas suplementares para decorar suas mensagens ou grupos delas. UICollectionView os processa em uma ordem diferente: UICollectionViewCell é o primeiro e somente após os switches para UICollectionReusableView s. Você provavelmente enfrentará algum comportamento inesperado durante a animação. Eu aconselho fortemente você contra o uso de seções.
ChatLayout pode ser usado junto com a textura para melhorar o desempenho de lançamento automático. Mas lembre -se de que o invólucro padrão é codificado para funcionar exclusivamente com UICollectionViewFlowLayout . Veja a edição. Você terá que implementar ChatLayoutDelegate e propagar o tamanho do nó manualmente.
Se você vir uma animação estranha ou inesperada durante as atualizações, verifique seu modelo de dados e os comandos enviados para o performBatchUpdates do UICollectionView . Especialmente se você estiver usando alguns algoritmos difíceis, como o diferencial. É muito possível que você esteja enviando comandos de exclusão/insira quando espera ver recarregar. A maneira mais fácil de verificar é adicionar print("(updateItems)") em ChatLayout.prepare(forCollectionViewUpdates:) Método. ChatLayout não sabe o que você esperava ver. Ele apenas processa suas alterações de acordo com os comandos que recebeu.
Cabeçalhos ou rodapés pegajosos não são suportados pelo ChatLayout , mas suas contribuições são bem -vindas.
ChatLayout é distribuído sob a licença do MIT.
ChatLayout é fornecido para seu uso, gratuitamente, em uma base como é. Não fazemos garantias, promessas ou desculpas. Desenvolvedor de advertência.
Inglês:
Russo:
Se você achar essa biblioteca útil e, especialmente, se estiver usando -a em produção, considere patrocinar este projeto aqui. Eu trabalho no ChatLayout no meu tempo livre, e seu patrocínio me ajudaria a continuar desenvolvendo e contribuindo para a comunidade de código aberto. Seu apoio me permitirá dedicar mais tempo e recursos a este projeto, garantindo que ele permaneça atualizado e relevante nos próximos anos.
Obrigado pela sua consideração!
Evgeny Kazaev, [email protected]. Twitter Ekazaev
Fico feliz em responder a quaisquer perguntas que você possa ter. Basta criar um novo problema.