我想使用创建以下自定义聊天气泡MessageKit
我CustomCell
在提供的示例中使用示例。但这不会根据发件人类型添加聊天气泡背景和定位。
如何创建具有相同聊天气泡背景的自定义单元格?
要制作自定义单元格,您必须制作一个继承自UICollectionViewCell
. 一旦你有了你的细胞,你需要告诉你的细胞的大小。怎么能做到这一点?
您必须创建一个继承自MessageSizeCalculator
或CellSizeCalculator
创建自定义单元大小计算器的类
您必须创建一个继承自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)
}
}
您可以在 GitHub 上查看此问题
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
}
}
如果你想扩展其他Cell
他们目前已更新其文档以包括如何添加自定义单元格。在此处 查看 阅读有关自定义单元格的更多信息