開(kāi)發(fā)此聊天界面時(shí),參考了第三方庫(kù)TLChat來(lái)進(jìn)行開(kāi)發(fā)珊膜。
在與后臺(tái)交互時(shí)容握,由于使用的是輪循請(qǐng)求數(shù)據(jù),設(shè)置定時(shí)器五秒請(qǐng)求一次车柠,在后臺(tái)消息正常發(fā)送時(shí)剔氏,不會(huì)出現(xiàn)此問(wèn)題,但是在后臺(tái)消息發(fā)送非常迅速時(shí)竹祷,frame沒(méi)有重新計(jì)算谈跛,導(dǎo)致下一個(gè)cell的寬度和高度使用的是上一個(gè)cell的高度和寬度。
- (MessageFrame *)messageFrame
{
??? if (kMessageFrame == nil) {
??????? kMessageFrame = [[MessageFrame alloc] init];
??????? kMessageFrame.height = 20 + (self.showTime ? 30 : 0) + (self.showName ? 15 : 0) + 20;
??????? NSString *leftStr?? = @"[link]";
??????? NSString *rightStr? = @"[/link]";
??????? NSString *lastStr?? = [self.text stringByReplacingOccurrencesOfString:leftStr withString:@""];
??????? NSString *finalStr? = [lastStr stringByReplacingOccurrencesOfString:rightStr withString:@""];
??????? [textLabel setText:finalStr];
??????? kMessageFrame.contentSize = [textLabel sizeThatFits:CGSizeMake(MAX_MESSAGE_WIDTH, MAXFLOAT)];
??????? kMessageFrame.height += kMessageFrame.contentSize.height;
??? }
??? return kMessageFrame;
}
此處使用kMessageFrame來(lái)重新計(jì)算高度布局塑陵,由于涉及到其它問(wèn)題感憾,所以對(duì)其中的某些方法也進(jìn)行了改造,具體可參照以下文章
聊天界面調(diào)用訊飛語(yǔ)音轉(zhuǎn)換為文字令花,文字在cell上不顯示
Xcode9.2運(yùn)行iOS11系統(tǒng)時(shí)阻桅,下方鍵盤彈出導(dǎo)致statusBar顏色變化
iOS NSMutableArray使用addObject:方法時(shí)數(shù)據(jù)被覆蓋
iOS向后臺(tái)發(fā)送圖片,圖片被翻轉(zhuǎn)以及圖片過(guò)大兼都,發(fā)送緩慢問(wèn)題的解決
使用
- (id)mutableCopyWithZone:(NSZone *)zone
{
Message *message = [[Message alloc]init];
message.messageFrame = self.messageFrame;
message.content = self.content;
message.text = self.text;
message.attrText = self.attrText;
message.messageID = self.messageID;
message.showName = self.showName;
message.showTime = self.showTime;
message.partnerType =self.partnerType;
message.messageType = self.messageType;
message.ownerTyper = self.ownerTyper;
message.sendState? = self.sendState;
message.imageURL? = self.imageURL;
message.imagePath? = self.imagePath;
message.imageSize = self.imageSize;
return message;
}
來(lái)保存了frame
在嘗試了各種方法之后嫂沉,選擇在此方法中
將frame先清空的方法
- (void)resetMessageFrame
{
kMessageFrame = nil;
}
調(diào)用此方法后,顯示正常扮碧。
若各位有更好方法趟章,請(qǐng)告知。謝謝。