在 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 (将#修改为@)