添加对自定义单元格的支持后,MessageKit 集合视图不显示任何单元格`

问题描述

我已经阅读了在 MessageKit here 中创建自定义单元格的指南,以及诸如 this 之类的问题

我正在尝试创建自定义单元格;这是我从 UICollectionViewCell 继承的单元格的代码

import UIKit
import MessageKit

open class ChatReferenceCell: UICollectionViewCell {
    
    @IBOutlet weak var authorLabel: UILabel!
    @IBOutlet weak var referenceText: UITextView!
    @IBOutlet weak var participantsLabel: UILabel!
    
    public override init(frame: CGRect) {
        super.init(frame: frame)
        setupSubviews()
    }
    
    public required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupSubviews()
    }
    
    open func setupSubviews() {
    }
    
    open override func layoutSubviews() {
        super.layoutSubviews()
    }
    
    open func configure(with message: MessageType,at indexPath: IndexPath,and messagesCollectionView: MessagesCollectionView) {
        // Do stuff
        switch message.kind {
        case .custom(let data):
            guard let systemMessage = data as? String else { return }
            referenceText.text = systemMessage
        default:
            break
        }
    }
    
}

这是自定义单元格的 XIB 文件

enter image description here

在我的 ChatViewController 中,我像这样设置聊天视图:

    messagesCollectionView.register(ChatReferenceCell.self)
    messagesCollectionView = MessagesCollectionView(frame: .zero,collectionViewLayout: MyCustomMessagesFlowLayout())
    messagesCollectionView.messagesDataSource = self
    messagesCollectionView.messagesLayoutDelegate = self
    messagesCollectionView.messagesdisplayDelegate = self
    messagesCollectionView.messageCellDelegate = self

以及配置自定义布局:

open class CustomMessageSizeCalculator: MessageSizeCalculator {
    open override func messageContainerSize(for message: MessageType) -> CGSize {
    // Customize this function implementation to size your content appropriately. This example simply returns a constant size
    // Refer to the default MessageKit cell implementations,and the Example App to see how to size a custom cell dynamically
        return CGSize(width: 300,height: 130)
    }
}


open class MyCustomMessagesFlowLayout: MessagesCollectionViewFlowLayout {
    lazy open var customMessageSizeCalculator = CustomMessageSizeCalculator(layout: self)

    override open 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);
    }
}

添加自定义单元格之前,我能够添加文本单元格并在聊天视图控制器中按预期显示它们:

enter image description here

在尝试添加自定义单元格的支持后,我得到了这样的布局:

enter image description here

编辑 由于我使用的是 NIB 文件,因此我尝试更正我注册单元格的方式,但仍然得到相同的结果:

messagesCollectionView.register(UINib(nibName: "ChatReferenceCell",bundle: nil),forCellWithReuseIdentifier: "kChatReferenceCollectionViewCell")

解决方法

试试这个方法。

messagesCollectionView = MessagesCollectionView(frame: .zero,collectionViewLayout: MyCustomMessagesFlowLayout()
messagesCollectionView.register(ChatReferenceCell.self)
super.viewDidLoad()

.....

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...