如何解决在 Swift 中的 JsqMessengerCollectionView 中显示日期
我需要像 Whatsapp 一样显示日期。例如,如果我今天在一次聊天中发送 5 条消息。我需要在第一次聊天的顶部显示为今天。我已经做到了。但是如果第一条消息是文本,它就可以工作。那个时候只工作。
假设我今天发送一张图片。这是第一张图片,但当时它没有像今天一样显示在顶部。如何解决?
其实我需要显示今天,昨天按天显示,但应该显示在每天的开始时间。
我的代码如下:
override func collectionView(_ collectionView: JSQMessagesCollectionView,layout collectionViewLayout: JSQMessagesCollectionViewFlowLayout,heightForCellTopLabelAt indexPath: IndexPath) -> CGFloat {
//set height for group Msg Tag
if isGroup {
let msg = self.messages[indexPath.item]
if msg.gpMessageType != "" {
return 0.0
}else {
if(indexPath.item == 0){
return 30.0
} else {
let currentMessage = self.messages[indexPath.item]
let prevIoUsMessage = self.messages[indexPath.item - 1]
if indexPath.item == 1{
if self.messages[indexPath.item - 1].gpMessageType != ""{
if DateExtension().compareDates(currentDate: currentMessage.date,prevIoUsDate: prevIoUsMessage.date) {
return 30.0
} else {
return 30.0
}
}
}else{
if DateExtension().compareDates(currentDate: currentMessage.date,prevIoUsDate: prevIoUsMessage.date) {
return 0.0
} else {
return 30.0
}
}
}
}
}
// let msg = self.messages[indexPath.item]
// switch msg.messageType {
// case .missedCallMessage:
// return 0.0
// default:
// return 0.0
// }
if(indexPath.item == 0){
return 30.0
} else {
let currentMessage = self.messages[indexPath.item]
let prevIoUsMessage = self.messages[indexPath.item - 1]
if DateExtension().compareDates(currentDate: currentMessage.date,prevIoUsDate: prevIoUsMessage.date) {
return 0.0
} else {
return 30.0
}
}
}
override func collectionView(_ collectionView: JSQMessagesCollectionView,heightForMessageBubbletopLabelAt indexPath: IndexPath) -> CGFloat {
//set height for group Msg Tag
if isGroup {
// let msg = self.messages[indexPath.item]
// if msg.gpMessageType != "" {
// return 0.0
// }
let msg = self.messages[indexPath.item]
if msg.gpMessageType != "" {
return 0.0
}else {
if(indexPath.item == 0){
return 30.0
} else {
let currentMessage = self.messages[indexPath.item]
let prevIoUsMessage = self.messages[indexPath.item - 1]
if indexPath.item == 1{
if self.messages[indexPath.item - 1].gpMessageType != ""{
if DateExtension().compareDates(currentDate: currentMessage.date,prevIoUsDate: prevIoUsMessage.date) {
return 30.0
} else {
return 30.0
}
}
}else{
if DateExtension().compareDates(currentDate: currentMessage.date,prevIoUsDate: prevIoUsMessage.date) {
return 0.0
} else {
return 30.0
}
}
}
}
}else{
let msg = self.messages[indexPath.item]
// switch msg.messageType {
// case .missedCallMessage:
// return 0.0
// default:
// return 0.0
// }
// if isGroup == false { return 0.0}
// let msg = self.messages[indexPath.item]
if indexPath.item - 1 > 0 {
let prevMsg = self.messages[indexPath.item - 1]
if prevMsg.senderId == msg.senderId {
return 0.0
}
}
}
return 20.0
}
//MARK: To show timestamp above message
override func collectionView(_ collectionView: JSQMessagesCollectionView,attributedTextForCellTopLabelAt indexPath: IndexPath) -> NSAttributedString? {
let message = self.messages[indexPath.item]
let messageVMObj = MessageViewModal(withMessage: message)
if isGroup {
// let msg = self.messages[indexPath.item]
// if msg.gpMessageType != "" {
// // return nil
// return messageVMObj.setDay()
//
// }else {
//
//
// if(indexPath.item == 0){
//
// return messageVMObj.setDay()
// } else {
// let currentMessage = self.messages[indexPath.item]
// let prevIoUsMessage = self.messages[indexPath.item - 1]
//
// if DateExtension().compareDates(currentDate: currentMessage.date,prevIoUsDate: prevIoUsMessage.date) {
// return messageVMObj.setDay()
// } else {
// return messageVMObj.setDay()
// }
// }
// }
return messageVMObj.setDay()
}
else{
if(indexPath.item == 0) {
return messageVMObj.setDay()
} else {
let currentMessage = self.messages[indexPath.item]
let prevIoUsMessage = self.messages[indexPath.item - 1]
if DateExtension().compareDates(currentDate: currentMessage.date,prevIoUsDate: prevIoUsMessage.date) {
// return nil
return messageVMObj.setDay()
} else {
return messageVMObj.setDay()
}
}
}
}
数据的响应是这种格式,而我只在聊天中发送文本:- po self.messages:
▿ 3 elements
▿ 0 : <_4.Message: senderId=1111111111,senderdisplayName=,date=2021-04-29 03:50:43 +0000,isMediaMessage=0,text=+111111111111,checktest,media=(null)>
▿ 1 : <_4.Message: senderId=6111111111111 senderdisplayName=,date=2021-04-29 03:50:51 +0000,text=Ghhjk,media=(null)>
▿ 2 : <_4.Message: senderId=1111111111,date=2021-04-29 04:45:16 +0000,text=Gjjko,media=(null)>
po self.messages
▿ 2 elements
▿ 0 : <_4.Message: senderId=111111,date=2021-04-29 04:47:03 +0000,text=+11111111,imagetest,media=(null)>
▿ 1 : <_4.Message: senderId=111111,date=2021-04-29 04:47:19 +0000,isMediaMessage=1,text=(null),media=<_4.SentimageMediaItem: 0x2822467f0>>
在第二个元素中,我有一个图像。所以,我需要在这上面展示。我需要显示这一天。怎么做?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。