ios - 如何使用 MessageKit 创建自定义单元格?

标签 ios swift chat messagekit

我想使用 MessageKit 创建以下自定义聊天气泡

enter image description here

我在提供的示例中使用 CustomCell 示例。但这不会根据发件人类型添加聊天气泡背景和定位。

如何创建具有相同聊天气泡背景的自定义单元格?

最佳答案

使用 MessageKit 创建自定义单元格

要创建自定义单元格,您必须创建一个继承自 UICollectionViewCell 的单元格。 一旦你有了你的细胞,你需要告诉你的细胞的大小。如何做到这一点?

您必须创建一个继承自 MessageSizeCalculatorCellSizeCalculator 的类才能制作自定义单元格大小计算器

您必须创建一个继承自 MessagesCollectionViewFlowLayout 的类,并添加自定义大小计算器以计算单元格的大小。

你必须覆盖两个方法来实现:

  • messageSizeCalculators() 添加自定义单元格大小计算器
  • cellSizeCalculatorForItem(at indexPath: IndexPath) 选择要使用自定义单元格计算器的单元格

从master分支可以看到这个例子:

open class CustomMessagesFlowLayout: MessagesCollectionViewFlowLayout {

    open lazy var customMessageSizeCalculator = CustomMessageSizeCalculator(layout: self)

    open override func cellSizeCalculatorForItem(at indexPath: IndexPath) -> CellSizeCalculator {
        let message = messagesDataSource.messageForItem(at: indexPath, in: messagesCollectionView)
        if case .custom = message.kind {
            return customMessageSizeCalculator
        }
        return super.cellSizeCalculatorForItem(at: indexPath)
    }

    open override func messageSizeCalculators() -> [MessageSizeCalculator] {
        var superCalculators = super.messageSizeCalculators()
        // Append any of your custom `MessageSizeCalculator` if you wish for the convenience
        // functions to work such as `setMessageIncoming...` or `setMessageOutgoing...`
        superCalculators.append(customMessageSizeCalculator)
        return superCalculators
    }
}

open class CustomMessageSizeCalculator: MessageSizeCalculator {

    public override init(layout: MessagesCollectionViewFlowLayout? = nil) {
        super.init()
        self.layout = layout
    }

    open override func sizeForItem(at indexPath: IndexPath) -> CGSize {
        guard let layout = layout else { return .zero }
        let collectionViewWidth = layout.collectionView?.bounds.width ?? 0
        let contentInset = layout.collectionView?.contentInset ?? .zero
        let inset = layout.sectionInset.left + layout.sectionInset.right + contentInset.left + contentInset.right
        return CGSize(width: collectionViewWidth - inset, height: 44)
    }

}

你可以看看这个issue on GitHub

使用 MessageKit 创建基于 MessageBubble 的单元格

MessageContentCellMessageKit 使用的类在聊天气泡中显示您的消息

你可以通过扩展这个类来创建一个单元格:

import MessageKit
import UIKit

open class CustomCell: MessageContentCell {

     open override func configure(with message: MessageType, at indexPath: IndexPath, and messagesCollectionView: MessagesCollectionView) {
         super.configure(with: message, at: indexPath, and: messagesCollectionView)


      }

     override open func layoutAccessoryView(with attributes: MessagesCollectionViewLayoutAttributes) {
         // Accessory view is always on the opposite side of avatar
     }


  }

如果要扩展其他Cells

关于ios - 如何使用 MessageKit 创建自定义单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56958482/

相关文章:

ios - 在特定日期触发UILocalNotification

Android - 套接字与轮询

android - 如何管理 Azure 通知中心中的数千个应用程序用户,并且收件人每天都在变化?

ios - 如何在 iOS 中全局更改字体大小

ios - 通用应用程序背景 SpriteKit

arrays - 按对象类型拆分 Swift 数组

javascript - 聊天 react 中的消息顺序

android - 将 XMPP 与 .net 服务器和 android 客户端一起使用

ios - 如何修复 "Command/usr/bin/codesign failed with exit code 1"错误

ios - 如何在UIView中制作可扩展的环形动画(类似海底声纳)?