iOS版MOJi辞書在进入收藏夹界面时列表会上下抖动的问题排查及修复

在MOJi辞書早些版本,也就是还未添加启用完整展示功能(单词例句内容完整显示)之前,我们每次点击收藏夹Cell进入收藏夹信息界面时,列表在数据请求回来然后展示没有什么异常的现象。

当加入启用完整展示功能后,经同僚测试并发现:每次进入收藏夹信息界面时,列表会上下抖动。但我总是无法重现该现象,后面我怀疑是不是代码上哪里写的有问题,导致系统出现该bug,后面就联想到自动计算高度的问题(因为我们是用xib创建的Cell,同时又是开关方式决定显示内容长度),想到了UITableViewAutomaticDimension。果不其然,我去掉自动计算高度,采用原来固定的cell的高度时,就不会出现抖动的问题了。

但是,我们又需要这个自动计算的功能(如果不用该方式去自动计算,采用传统的先计算高度,保存到内存缓存再获取后展示,然后关闭启用完整展示功能又要计算多一次,这样实现过于繁琐)。后面做了各种尝试,实在没办法解决,又不能影响当前工作进度,暂时搁置了。

后来,开始做收藏夹列表过滤的功能,由于当时自认为考虑到列表滑动的流畅度,而把word、example、sentence、news、folder等target各自独立成一个MOJiFavTargetCell,但现在如果做这个过滤功能,非Folder类型的Cell都需要展示target文件夹所属,如下图所示:

筛选单词效果图

所以,我需要给多个Cell添加这个来源视图控件。这种实现突然发现很不好,重复作业太多。咬咬牙,花业余时间重新整成一个控件去实现(自己折腾自己),这控件定义为MOJiFavCell。当该功能完成后,开始对其进行各种测试,其中一个测试环节是主题字体切换效果展示测试:根据不同样式的字体效果,看看Cell的展示是否正常。

神助啊!!!

突然发现,主题字体如果切换到魔性、清新、厚实这三个风格后,进入文件夹信息界面时列表依旧抖动的很厉害,而且是必现!然后回过头来尝试用回默认字体去测试,居然不会抖动!立马就得出一个结论:使用不同的字体样式,系统在自动计算Cell高度时结果可能会有偏差。

紧接着,认真看了下MOJiFavCell里面会影响自动计算高度的控件(一个是titleL、一个是subtitleL)。那如果有偏差,我就尝试减少需要自动计算的控件,直接把subtitleL的高度固定死(假设给个24pt),只让系统计算titleL的高度即可。最后经过测试每个主题字体风格后,进入收藏夹信息界面,列表不再抖动。这时候已经很激动了!!!

最后,由于MOJiFavCell里面新增了文件夹来源视图(这里在代码里称为SourceV,高度就是24pt),直接让titleLBottom To SourceVTop,然后subtitleL保持与SourceV的CenterY一致,也可以达到设计稿上的展示效果。


总结:

使用不同的字体样式,系统在自动计算Cell高度时结果可能会有偏差,根据需求做出相应的调整即可。