UICollectionViewDiffableDataSource ChatLayout - это альтернативное решение для MessageKit. Он использует Custom UICollectionViewLayout , чтобы предоставить вам полный контроль над презентацией, а также все инструменты, доступные в UICollectionView .
UICollectionView во время обновлений. ChatLayout - это пользовательский UICollectionViewLayout , так:
Вам не нужно расширять или переопределять какой -либо пользовательский UIViewController или UICollectionView . Вы должны создавать их самостоятельно и использовать их так, как вам нравится.
ChatLayout не полагается на модифицированную UICollectionViewFlowLayout , а также не вращает ваш UICollectionView вверх ногами. Это означает, что вы можете использовать свои взгляды, как если бы они были обычными ячейками в UICollectionView . Вы можете извлечь выгоду из использования реализаций UIKit по умолчанию adjustedContextInsets (и других), потому что ваш контроллер представления является контроллером обычного представления без каких -либо взломов или трюков.
ChatLayout не требует, чтобы вы рассчитывали все размеры ячейки, прежде чем он отдаст их на экране. Вы можете в полной мере использовать ограничения автоматического лайаута и полагаться на тот факт, что правильный размер будет рассчитан во время выполнения. Тем не менее, ChatLayout , как и любой другой UICollectionViewLayout выиграет от вас, предоставляя расчетные размеры ваших ячеек, поскольку это позволит вам получить лучшую производительность.
ChatLayout не обеспечивает соблюдение вас использовать какую -либо конкретную модель данных. Вы можете сохранить свои сообщения и обновить UICollectionView так, как вам нравится. Единственное, что вам нужно, - это уважать естественные границы, которые имеет UICollectionView , и правильно реализовать UICollectionViewDataSource . Пример приложения использует DifficeKit для обработки изменений в модели данных.
ChatLayout не заставляет вас использовать какие -либо конкретные UIView S для создания ваших ячеек сбора. Вы можете создать их так, как вам нравится. Это может быть любая UICollectionViewCell или UICollectionReusableView . Есть несколько общих UIView S, связанные с библиотекой, которая может помочь вам быстрее построить их. Однако вам не нужно их использовать.
ChatLayout не обрабатывает поведение на клавиатуре. Вы должны реализовать это с нуля или использовать библиотеку, которую вы уже используете в своем проекте. Это дает вам полный контроль над презентацией клавиатуры. Единственное, что вам нужно сделать, - это обновить contentInsets вашего UICollectionView .
ChatLayout не предоставляет вам никакого элемента управления вводом. Вы можете использовать любой, который вам нравится, и настроить его так, как вам нравится. Пример, например, использует inputBaraccessoryView.
Чтобы запустить пример проекта, клонируйте репо, и сначала запустите pod install из Directory Directory.
ChatLayout доступен через Cocoapods, Carthage и Swiftpm. См. Example приложения для деталей использования.
Если вы используете кокопод, вы можете установить весь пакет, используя pod 'ChatLayout' . Если вам не нужны предоставленные дополнительные компоненты, вы можете установить только саму макет, используя pod 'ChatLayout/Core'
ChatLayout находится в активном развитии, и мы приветствуем ваш вклад.
Если вы хотите внести свой вклад в это репо, пожалуйста, прочитайте рекомендации взносов.
UICollectionViewDiffableDataSource ChatLayout может обработать любые команды обновления, которые вы отправляете в свой UICollectionView , так что вы также можете использовать UICollectionViewDiffableDataSource .
Это может быть заманчиво, и это может выглядеть так, как будто это правильный путь, но не используйте дополнительные взгляды, чтобы украсить ваши сообщения или группы из них. UICollectionView обрабатывает их в другом порядке: UICollectionViewCell S и только после переходов на UICollectionReusableView S. Скорее всего, вы столкнетесь с неожиданным поведением во время анимации. Я настоятельно рекомендую вам использовать разделы вообще.
ChatLayout может использоваться вместе с текстурой для улучшения производительности автоматического лайаута. Но имейте в виду, что обертка по умолчанию жестко кодирована, чтобы работать исключительно с UICollectionViewFlowLayout . Смотрите проблему. Вам придется реализовать ChatLayoutDelegate и распространять размер узла вручную.
Если вы видите странную или неожиданную анимацию во время обновлений, проверьте свою модель данных и команды, которые вы отправляете в UICollectionView 's performBatchUpdates . Особенно, если вы используете некоторые различные алгоритмы, такие как DiffereKit. Вполне возможно, что вы отправляете команды Delete/INSERT, когда вы ожидаете увидеть перезагрузку. Самый простой способ проверить его - добавить print("(updateItems)") в ChatLayout.prepare(forCollectionViewUpdates:) Метод. ChatLayout не знает, что вы ожидаете увидеть. Это просто обрабатывает ваши изменения в соответствии с полученными командами.
ChatLayout не поддерживаются липкими заголовками или нижним колонтитулом, но ваши вклады приветствуются.
ChatLayout распространяется по лицензии MIT.
ChatLayout предоставляется для вашего использования, бесплатно, на основе. Мы не делаем никаких гарантий, обещаний или извинений. Разработчик предостережения.
Английский:
Русский:
Если вы найдете эту библиотеку полезной, и особенно если вы используете ее в производстве, пожалуйста, рассмотрите возможность спонсировать этот проект здесь. Я работаю над ChatLayout в свободное время, и ваше спонсорство поможет мне продолжать развиваться и вносить свой вклад в сообщество с открытым исходным кодом. Ваша поддержка позволит мне посвятить больше времени и ресурсов этому проекту, гарантируя, что он остается актуальным и актуальным в течение многих лет.
Спасибо за ваше внимание!
Evgeny Kazaev, [email protected]. Твиттер Эказаев
Я рад ответить на любые ваши вопросы. Просто создайте новую проблему.