如何在Swift 4中正确实现MessageKit? |委托函数未被调用

时间:2018-08-15 11:22:55

标签: ios swift messagekit

我试图在我的iOS swift应用程序中实现聊天功能的MessageKit(替换JSQMessagesViewController)。我已遵循此raywenderlich tutorial。我使用Pods进行安装,并逐步遵循了本教程。我的消息正在显示。根据本教程,为了隐藏用户头像,我将viewController设置为messagesLayoutDelegatemessagesDisplayDelegate的委托。

//Inside view did load, i set the delegates, along with data source
messagesCollectionView.messagesDataSource = self
messagesCollectionView.messagesLayoutDelegate = self
messagesCollectionView.messagesDisplayDelegate = self

但是,MessagesLayoutDelegate的委托函数没有被调用。

我想隐藏用户头像,因此我在viewController中采用了协议

extension ChatLogVC_MessageKit: MessagesLayoutDelegate {

 func avatarSize(for message: MessageType, at indexPath: IndexPath,
              in messagesCollectionView: MessagesCollectionView) -> CGSize {

    //return zero size for hiding avatar, but this function is not being called. 

  return .zero
 }

 func footerViewSize(for message: MessageType, at indexPath: IndexPath,
                      in messagesCollectionView: MessagesCollectionView) -> CGSize {

    //also not being called

    return CGSize(width: 0, height: 8)
 }

}

我在这些函数中设置了断点,但是断点从未命中。此外,也没有调用shouldDisplayHeader的{​​{1}}函数

任何帮助将不胜感激

注意:我仅在模拟器上对其进行了测试。

2 个答案:

答案 0 :(得分:3)

您的委托方法看起来已经过时了。如果您使用的是可可豆荚,请至少使用1.0.0 beta 1版本:

pod 'MessageKit', '1.0.0-beta.1'

或者更好的是使用1.0.0版本:

pod 'MessageKit', '1.0.0'

在您的viewDidLoad()方法中,设置委托:

messagesCollectionView.messagesDataSource = self
messagesCollectionView.messagesLayoutDelegate = self
messagesCollectionView.messagesDisplayDelegate = self
messagesCollectionView.messageCellDelegate = self

顺便说一下,头像大小是在MessagesDisplayDelegate方法func configureAvatarView(_ avatarView: AvatarView, for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView)中设置的。

答案 1 :(得分:2)

在库中检出示例

https://crossbrowsertesting.com