一个社区驱动的 JSQMessagesViewController 替代方案

Xcode MIT Contributions Welcome


目标

安装

Swift Package Manager - 推荐

Xcode 12 中的 Swift 5.3 添加了支持 Swift 包中的资源。您可以通过输入其仓库 URL 直接添加 MessageKit 包到您的项目中

https://github.com/MessageKit/MessageKit

旧版本的 Swift 和 Xcode 不支持通过 SPM 使用 MessageKit。

手动

要求

对于 iOS 13 或 Swift 5.x,请使用 4.3.0 版本

对于 iOS 12 或 CocoaPods,请使用 3.8.0 版本

对于 iOS 11,请使用 3.3.0 版本

对于 iOS 9 和 iOS 10,请使用 3.1.1 版本

开始

请查看 快速入门指南常见问题解答

我们建议您首先查看 示例 项目,或者在 Stack Overflow 上使用 "messagekit" 标签提出问题。 您还可以查看 GitHub 上带有 "Question" 标签的先前问题。

有关如何使用 MessageInputBar 的更多信息,请参阅其所基于的依赖项 InputBarAccessoryView。您也可以查看这个简短的指南

在此处查看完整的文档 here

Cell 结构

每个默认 cell 都是 MessageContentCell 的子类,它有 7 个部分。 从上到下,我们有一个:cellTopLabelmessageTopLabelmessageContainerViewmessageBottomLabelcellBottomLabelavatarViewaccessoryView 分别位于两侧。 上面我们看到了基本的 TextMessageCell,它使用 MessageLabel 作为其主要内容。

这种结构将允许您创建一个适合您需求的布局,因为您可以自定义每个布局的大小、外观和填充。 如果您需要更高级的东西,您可以实现一个自定义 cell,我们在 示例 项目中展示了如何操作。

InputBarAccessoryView 结构

来自 InputBarAccessoryView 的第三方依赖项 InputBarAccessoryView 是一种灵活而强大的方式,可以创建您想要的任何类型的输入布局。查看仓库和示例以获取更多信息。

默认 Cells

为给定消息渲染的 cell 类型基于 MessageKind

public enum MessageKind {
    case text(String) // TextMessageCell
    case attributedText(NSAttributedString) // TextMessageCell
    case photo(MediaItem) // MediaMessageCell
    case video(MediaItem) // MediaMessageCell
    case location(LocationItem) // LocationMessageCell
    case emoji(String) // TextMessageCell
    case audio(AudioItem) // AudioMessageCell
    case contact(ContactItem) // ContactMessageCell
    case linkPreview(LinkItem) // LinkPreviewMessageCell

    /// A custom message.
    /// - Note: Using this case requires that you implement the following methods and handle this case:
    ///   - MessagesDataSource: customCell(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> UICollectionViewCell
    ///   - MessagesLayoutDelegate: customCellSizeCalculator(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> CellSizeCalculator
    case custom(Any?)
}

如果您选择使用 .custom 类型,则您负责所有 cell 的布局。 任何 UICollectionViewCell 都可以为自定义 cell 返回,这意味着您从 MessageDisplayDelegate 提供的任何样式都不会影响您的自定义 cell。 即使您从 MessageContentCell 继承您的 cell。 阅读更多关于自定义 cell 的信息

在快速入门指南中阅读更多关于这些情况的信息。

贡献

Tests Build framework Build example app Danger

太棒了!首先查看这些内容。

下一步是什么?

查看 Releases,了解我们接下来要做什么。

联系方式

对于 MessageKit 有疑问或问题?创建一个 issue

有兴趣为 MessageKit 做贡献吗? 点击此处加入我们的 Slack

使用此库的应用程序

将您的应用添加到使用此库的应用列表中,并创建一个 pull request。

请提供署名,我们将不胜感激。

核心团队

感谢

非常感谢这个项目的 贡献者

许可证

MessageKit 在 MIT 许可证 下发布。

灵感

灵感来自 JSQMessagesViewController 👈 💯