在 MessageKit 中 configureAvatarView 无法正常工作
Posted
技术标签:
【中文标题】在 MessageKit 中 configureAvatarView 无法正常工作【英文标题】:configureAvatarView not working properly in MessageKit 【发布时间】:2021-03-12 19:29:17 【问题描述】:我正在使用MessageKit 为我的应用创建聊天界面。
如果多条消息来自同一作者,我目前正在使用他们示例中的此代码来不显示用户的头像:
func configureAvatarView(_ avatarView: AvatarView, for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView)
let sigil = Sigil(ship: Sigil.Ship(rawValue: message.sender.senderId)!, color: .black).image(with: CGSize(width: 24.0, height: 24.0))
let avatar = Avatar(image: sigil, initials: "")
avatarView.set(avatar: avatar)
avatarView.isHidden = isNextMessageSameSender(at: indexPath)
func isNextMessageSameSender(at indexPath: IndexPath) -> Bool
guard indexPath.section + 1 < messages.count else return false
return messages[indexPath.section].sender.displayName == messages[indexPath.section + 1].sender.displayName
这是 MessageKit 示例应用程序中的样子:
这是在我的应用中使用相同代码的结果:
编辑
看来问题出在此处:
func isNextMessageSameSender(at indexPath: IndexPath) -> Bool
guard indexPath.section + 1 < messages.count else return false
return messages[indexPath.section].sender.displayName == messages[indexPath.section + 1].sender.displayName
但我还没有确切地缩小范围
编辑 2 我试着让它检查使用行而不是列;仍然得到这种结果:
【问题讨论】:
可以尝试使用SDWebImage设置头像吗? 使用行而不是部分... @CloudBalancing 在尝试后刚刚更新了我的问题 所以检查用户是否相同的函数会出错。不是吗?我不确定 MessageKit,但也许您还需要准备单元格以供重用? 【参考方案1】:好的,首先我们来分析一下你的函数configureAvatarView
。
func configureAvatarView(_ avatarView: AvatarView, for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView)
let sigil = Sigil(ship: Sigil.Ship(rawValue: message.sender.senderId)!, color: .black).image(with: CGSize(width: 24.0, height: 24.0))
let avatar = Avatar(image: sigil, initials: "")
avatarView.set(avatar: avatar)
avatarView.isHidden = isNextMessageSameSender(at: indexPath)
从我们那里可以看到,您正在根据发件人的姓名生成一个印记,并且您正在根据该图像创建头像。
正如我们在您分享的第一张图片中看到的那样,这张图片在接收者的第 8 条消息中发生了变化。这让我觉得问题可能实际上并不在于图形函数,而在于您如何处理保存 MessageType 集合的数据结构。
其次,我看到您使用该sender.senderId
属性来设置头像,所以我猜它是一个独特的属性,但之后您使用另一个属性来进行与下一条消息所有权相关的比较:@987654327 @。这背后有什么原因吗?
func isNextMessageSameSender(at indexPath: IndexPath) -> Bool
guard indexPath.section + 1 < messages.count else return false
return messages[indexPath.section].sender.displayName == messages[indexPath.section + 1].sender.displayName
最后,由于您在 message
中使用了 SenderType,您如何将这些发件人附加到邮件本身?
此外,如果您在问题中指明哪些用户应该参与该对话以及哪些消息确实对应于他们每个人,这可能会有所帮助。他们会出现问题吗?只有发件人?
我认为您面临的问题不在于 ViewController。
【讨论】:
这似乎是最好的答案,在MessageKit github问题中,他也得到了答案并解决了这个问题,但没有将此答案标记为真。可惜 github.com/MessageKit/MessageKit/issues/1554以上是关于在 MessageKit 中 configureAvatarView 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章