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
我很高兴回答您可能遇到的任何问题。只需创建一个新问题即可。