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高度时结果可能会有偏差,根据需求做出相应的调整即可。

iOS之解决上传IPA时报错(Invalid Bundle. xx.framework contains disallowed file ‘Frameworks’ or disallowed nested bundles)的问题

起因:

由于Xcode的一些原因(缓存等)导致MOJiAccount项目编译失败,所以我重新在MOJiAccount框架中添加MOJiBase.xcframework依赖框架,然后才编译运行成功。但是在Embed这一块中,发现如下图所示的情况:

添加框架时,会默认Embed & Sign

正是因为这个原因,使得主项目在使用新的MOJiAccount.xcframework,并Archive后,会出现如下图所示的情况:

MOJiAccount框架在打包后出现子框架

然后在此基础上,上传IPA时,报错误如下图所示:

解决方案:

在Embed项中,把MOJiBase.xcframework切换成Do not Embed即可,如图所示:

同时,项目在Archive后,MOJiAccount框架不再显示子框架,如图所示:

最后,上传IPA成功。


总结:

1.MOJi框架如果引用其他MOJi框架(在主项目中已经使用的框架并且Embed & Sign)时,不需要再Embed & Sign,因为不支持框架嵌套,也不支持框架重复Embed & Sign。


2.每次打包框架后,都需要检查Embed属性是否为Do not Embed