接手项目较晚 没有亲手集成 bug修起来很难受
你知道它有问题 你也知道是哪块儿除了问题 可就是没法找到问题代码在哪 纠结的一上午 下面我就介绍一下这个bug
问题出在这套SDK中控制message内容显示范围的代码
- (void)layoutConfig:(NIMMessageModel *)model{
model.sessionConfig = self.sessionConfig;
model.layoutConfig = [self layoutConfigForModel:model];
[model calculateContent:self.tableView.frame.size.width force:NO];
}
问题出在这段代码中的这一句
[model calculateContent:self.tableView.frame.size.width force:NO]
当你第一次发送语音消息时 当前界面的tableView已经被加载显示出来了 在这里拿到的就是正常的375
而当你第二次进入当前界面 在tableView中的返回行高的代理方法中会调用这个方法 而这时 tableView还未加载出来
所有此时拿到的宽度是600 是StoryBoard中的宽度 因为所有宽度的计算基数是当前显示界面的宽度 因为拿到的宽度是正确宽度的1.6倍 会导致后续计算结果全部扩张 从而导致语音cell显示过长 横跨整个屏幕
所有此次应当进行修改 修改为
- (void)layoutConfig:(NIMMessageModel *)model{
model.sessionConfig = self.sessionConfig;
model.layoutConfig = [self layoutConfigForModel:model];
[model calculateContent:[UIScreen mainScreen].bounds.size.width force:NO];
}
这里直接获取当前屏幕宽度 进行后续计算 不会对结果造成影响 又巧妙地避开了这个bug