iOS Developer

iOS聊天界面后台数据发送过快,导致展示cell的frame没有

2017-12-22  本文已影响0人  _相信未来_

开发此聊天界面时,参考了第三方库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来重新计算高度布局,由于涉及到其它问题,所以对其中的某些方法也进行了改造,具体可参照以下文章

聊天界面调用讯飞语音转换为文字,文字在cell上不显示

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;

}

调用此方法后,显示正常。

若各位有更好方法,请告知。谢谢。

上一篇下一篇

猜你喜欢

热点阅读