如何使用 MessageKit 创建自定义单元格?
Posted
技术标签:
【中文标题】如何使用 MessageKit 创建自定义单元格?【英文标题】:How to create custom cell with MessageKit? 【发布时间】:2019-07-09 18:15:36 【问题描述】:我想使用MessageKit
创建以下自定义聊天气泡
我在提供的示例中使用CustomCell
示例。但这不会根据发件人类型添加聊天气泡背景和定位。
如何创建具有相同聊天气泡背景的自定义单元格?
【问题讨论】:
【参考方案1】:使用MessageKit 创建自定义单元格
要创建自定义单元格,您必须创建一个继承自 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)
你可以看看这个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
【讨论】:
API 错误:<_uikbcompatinputview: layer="<CALayer:">> 返回 0 宽度,假设 UIViewNoIntrinsicMetric.... 在模拟器中打开键盘时出现此错误。【参考方案2】:他们目前已更新其文档以包括如何添加自定义单元格。在这里检查 Read more about custom cells
【讨论】:
以上是关于如何使用 MessageKit 创建自定义单元格?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 2 个或更多自定义单元格创建自定义 UICollectionView?