iOS聊天界面后臺數據發送過快,導致展示cell的frame沒有重新計算

開發此聊天界面時,參考了第三方庫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來重新計算高度布局,由于涉及到其它問題,所以對其中的某些方法也進行了改造,具體可參照以下文章

聊天界面調用訊飛語音轉換為文字,文字在cell上不顯示

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;

}

調用此方法后,顯示正常。

若各位有更好方法,請告知。謝謝。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容