使用LaunchScreen.storyboard后,运行时显示老的图片

来源:互联网 发布:网络言论自由的例子 编辑:程序博客网 时间:2024/04/27 21:02

1.问题描述

1.1.运行环境

Xcode版本:7.3.1
Simulator版本:8.4 & 9.3

1.2.背景

做一个项目APP时需要修改启动页,而老版本的启动页是通过launchImage在asset catalog中设置不同尺寸的启动图片。但产品化只提供了一套图片,所以改成了通过launchScreen.storyboard添加UIImageView加载图片,然后适配不同的屏幕。

1.3.问题

修改完毕之后,惊喜地发现6p,6sp上运行是对的。

在6p模拟器上的效果

但是在6s,6及以下的窄屏模拟器上有问题,显示在launchScreen上,似乎在新的界面上多了一份asset catalog中设置的老图片。

在6s模拟器上的效果

因为怀疑是工程中的老文件有冲突,所以就把asset catalog清空,但也没有效果。

2.解决方法

2.1.思路

后来尝试在launchScreen.storyboard中加载其他图片,6s中不会显示老的启动图。
尝试将启动页资源图片的名字由launchImage@2x.png launchImage@3x.png 改为 launchImage1.1@2x.png launchImage@3x.png 之后,6s模拟器上也不再显示老的启动图。

因此怀疑是工程中存在名为launchImage@2x.png 的图片,但是仔细查找后没有发现。

最后怀疑是在Xcode的缓存数据derivedData中存在老的图片,于是将Xcode中的derivedData清空,重新运行,效果正常。

2.2.结果

清空Xcode的缓存derivedData数据,重新运行即可。

3.原因

该工程的上个版本中在asset catalog中设置了5s的启动图,但未设置6p对应的启动图。

而在本次修改时,Xcode打包时因为某种原因未能用launchImage@2x.png 同步替换缓存中旧的同名文件,只新增了launchImage@3x.png 文件到缓存中。

所以在打包时就将旧的launchImage@2x.png 和 launchImage@3x.png 文件打包进了APP中,所以导致在6s / 6p中运行时,分别显示了不同的图片。

4.其他

推荐一个用来清理Xcode中derivedData的插件:
https://github.com/kattrali/deriveddata-exterminator

0 0