开发此聊天界面时,参考了第三方库TLChat来进行开发。
在与后台交互时,由于使用的是轮循请求数据,设置定时器五秒请求一次,在后台消息正常发送时,不会出现此问题,但是在后台消息发送非常迅速时,frame没有重新计算,导致下一个cell的宽度和高度使用的是上一个cell的高度和宽度。
- (ZYMessageFrame *)messageFrame
{
if (kMessageFrame == nil) {
kMessageFrame = [[ZYMessageFrame 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
{
ZYMessage *message = [[ZYMessage 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;
}
调用此方法后,显示正常。
若各位有更好方法,请告知。谢谢。
网友评论