美文网首页iOS Developer
iOS聊天界面后台数据发送过快,导致展示cell的frame没有

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

作者: _相信未来_ | 来源:发表于2017-12-22 09:49 被阅读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;

    }

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

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/mmhtgxtx.html