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

How to create custom cell with MessageKit?(如何使用MessageKit创建自定义单元格?)

本文介绍了如何使用MessageKit创建自定义单元格?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要使用MessageKit创建以下自定义聊天泡沫

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

如何创建同聊天泡沫背景的自定义单元格?

推荐答案

使用MessageKit

创建自定义单元格 要创建自定义单元格,您必须创建继承自UICollectionViewCell的单元格。 一旦你有了手机,你就需要告诉你手机的大小。怎样才能做到这一点呢?

您必须创建从MessageSizeCalculatorCellSizeCalculator继承的类,才能创建自定义像元大小计算器

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

您必须重写两个方法才能实现:

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

您可以从主分支中看到此示例:

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创建单元格

MessageContentCell是MessageKit用来在聊天泡沫中显示您的消息的类

只需扩展此类即可创建单元格:

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

这篇关于如何使用MessageKit创建自定义单元格?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:如何使用MessageKit创建自定义单元格?

基础教程推荐