開發此聊天界面時,參考了第三方庫TLChat來進行開發。
在與后臺交互時,由于使用的是輪循請求數據,設置定時器五秒請求一次,在后臺消息正常發送時,不會出現此問題,但是在后臺消息發送非常迅速時,frame沒有重新計算,導致下一個cell的寬度和高度使用的是上一個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來重新計算高度布局,由于涉及到其它問題,所以對其中的某些方法也進行了改造,具體可參照以下文章
Xcode9.2運行iOS11系統時,下方鍵盤彈出導致statusBar顏色變化
iOS NSMutableArray使用addObject:方法時數據被覆蓋
iOS向后臺發送圖片,圖片被翻轉以及圖片過大,發送緩慢問題的解決
使用
- (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;
}
來保存了frame
在嘗試了各種方法之后,選擇在此方法中
將frame先清空的方法
- (void)resetMessageFrame
{
kMessageFrame = nil;
}
調用此方法后,顯示正常。
若各位有更好方法,請告知。謝謝。