ChatLayout
是 MessageKit 的替代解决方案。它使用自定义的 UICollectionViewLayout
为您提供对呈现的完全控制,以及 UICollectionView
中提供的所有工具。
UICollectionView
顶部或底部最后一个可见项目的内容。ChatLayout
是自定义的 UICollectionViewLayout
,所以
您不必扩展或覆盖任何自定义 UIViewController
或 UICollectionView
。您需要自己实例化它们,并以您喜欢的方式使用它们。
ChatLayout
不依赖于修改过的 UICollectionViewFlowLayout
,也不会将您的 UICollectionView
上下颠倒。 这意味着您可以像在 UICollectionView
中使用常规单元格一样使用您的视图。您可以受益于使用 UIKit
的默认 adjustedContextInsets
(和其他) 实现,因为您的视图控制器是一个普通的视图控制器,没有任何 hack 或技巧。
ChatLayout
不要求您在屏幕上渲染单元格之前计算所有单元格的大小。 您可以完全使用自动布局约束,并依赖于在运行时计算出正确大小的事实。但是,与任何其他 UICollectionViewLayout
一样,ChatLayout
会受益于您提供单元格的估计大小,因为这可以提高性能。
ChatLayout
不强制您使用任何特定的数据模型。您可以存储您的消息并以您喜欢的方式更新 UICollectionView
。您唯一需要做的是尊重 UICollectionView
的自然边界,并正确实现 UICollectionViewDataSource
。示例应用程序使用 DifferenceKit 来处理数据模型中的更改。
ChatLayout
不强制您使用任何特定的 UIView
来创建您的集合单元格。您可以按照您喜欢的方式创建它们。它可以是任何 UICollectionViewCell
或 UICollectionReusableView
。该库捆绑了一些通用的 UIView
,可能有助于您更快地构建它们。但是,您不必使用它们。
ChatLayout
不处理键盘显示行为。您必须从头开始自己实现,或者使用您已经在项目中使用的库。它可以让您完全控制键盘的呈现方式。您唯一需要做的就是更新 UICollectionView
的 contentInsets
。
ChatLayout
不为您提供任何输入控件。您可以使用任何您喜欢的控件,并以您喜欢的方式自定义它。例如,示例应用程序使用 InputBarAccessoryView。
要运行示例项目,请克隆存储库,然后首先从 Example 目录运行 pod install
。
ChatLayout
可通过 CocoaPods、Carthage 和 SwiftPM 获得。有关使用详情,请参见 Example
应用程序。
如果您正在使用 cocoapods,您可以使用 pod 'ChatLayout'
安装整个软件包。如果您不需要提供的其他组件,您可以使用 pod 'ChatLayout/Core'
仅安装布局本身
ChatLayout
正在积极开发中,我们欢迎您的贡献。
如果您想为此仓库做出贡献,请阅读 贡献指南。
ChatLayout
可以处理您发送到 UICollectionView
的任何更新命令,因此您也可以使用 UICollectionViewDiffableDataSource
。
这可能很诱人,并且看起来是正确的选择,但是**不要**使用补充视图来装饰您的消息或消息组。 UICollectionView
以不同的顺序处理它们:首先是 UICollectionViewCell
,之后才切换到 UICollectionReusableView
。在动画期间,您很可能会遇到一些意外行为。**我强烈建议您不要使用任何 sections。**
ChatLayout
可以与 Texture 一起使用,以提高自动布局性能。但请记住,它的默认包装器被硬编码为仅与 UICollectionViewFlowLayout
一起使用。 查看问题。您必须自己实现 ChatLayoutDelegate
并手动传播节点大小。
如果您在更新期间看到奇怪或意外的动画,请检查您的数据模型以及**您发送到 UICollectionView
的 performBatchUpdates
的命令**。 特别是如果您使用的是类似 DifferenceKit 的一些差异算法。 很可能您在期望看到重新加载时发送了删除/插入命令。 检查它的最简单方法是在 ChatLayout.prepare(forCollectionViewUpdates:)
方法中添加 print("\(updateItems)")
。 ChatLayout
不知道您期望看到什么。它只是根据收到的命令处理您的更改。
ChatLayout
在 MIT 许可证 下分发。
ChatLayout
免费提供给您使用,按原样提供。 我们不作任何保证、承诺或道歉。Caveat developer. (开发者请注意。)
英语
俄语
如果您发现此库有用,特别是如果您在生产中使用它,请考虑 在此处 赞助此项目。 我在业余时间开发 ChatLayout
,您的赞助将帮助我继续开发并为开源社区做出贡献。 您的支持将使我能够投入更多的时间和资源到这个项目中,确保它在未来几年内保持最新和相关。
感谢您的考虑!
Evgeny Kazaev, eugene.kazaev@gmail.com. Twitter ekazaev
我很乐意回答您可能遇到的任何问题。 只需创建一个 新问题。