iOS LaunchScreen 适配与缓存踩坑
由于之前WWDC2019上,针对 iOS13 UI 更新方面的会议上,提到了三个开发者不得不重视的问题,均规定 2020 年 4 月前需全部适配。
烦人的Launch Screen 适配
由于之前WWDC2019上,针对 iOS13 UI 更新方面的会议上,提到了三个开发者不得不重视的问题,均规定 2020 年 4 月前需全部适配。(网图侵删除)
由于之前用的是 Launch Image
, 替换新的启动图的时候都需要设计适配好多机型,增大了设计的工作量 && 替换的工作量,而且苹果越出越多不同尺寸的设备(渐渐Android化??) , 所以其实还是挺支持苹果这次的决定的.
工程基本不用 xib
, storyboard
,这个适配就让我比较抓狂了.
首先承认我是拖线的小白, UI全代码撸(虽然麻烦但是心里踏实啊).
这次的启动图,是需要适配所有苹果机型,包括 iPhone , iPad 的横竖屏,而且我们原来的 Launch Image
还能根据不同设备大小,由设计同学随心所欲来(觉得好看)来微调一下,这次统一来做一套的确是有难度!
由于私隐问题我还是将这次我们的启动图sb
换个素材来呈现下说下问题吧
以上是我们项目启动图,随便替换了一下项目中素材哦
设计同学要求:
- 这个 ICON 不同机型等比放大
- 不同机型ICON位置最好就在这个位置
- 底部2个素材(本来是2个文字图片素材) 也是等比放大
- 底部2个素材距离底部大概这个位置
简简单单一说就很难了….
首先看上面的 ICON , 上边距又不能以顶部做基准来按比例做, 批评一下xib,怎么不能弄顶部相对屏幕高度的比例呢?所以这次我只能偷偷在屏幕中心新建了一个透明的 UIView
作为中心,然后再新建一个 UIView
做高度基于屏幕高度的百分之几,然后这个 ICON 只能底部紧挨着这个隐形的 View
做布局.为了做一个简单的ICON定位,就要做这么多额外东西.底部2个素材也是如此炮制,竖屏终于弄完了….
还以为解脱时候,一看iPad横屏就傻眼了
由于这个ICON的宽度是基于屏幕宽的比例,来定宽度,然后宽高成比例等比放大的,屏幕一横,由于 IPad 横屏宽度飚了几个档次,这样就会导致ICON出现严重的放大爆出了屏幕
(由于项目已经调整过,没有当时的图了,大家脑补一下画面)
而且ICON宽度也不能基于屏幕高度来定制啊..所以此时陷入了困境,这时候说出一句
“SB苹果!”
想到了 SizeClass
, 好吧试一下看看行不行
Size Classes 是 Apple 在 iOS 8 推出的一个新特性,用于适配不同的设备屏幕的UI界面
在 Size Classes 中,设备的宽高可以被区分为 Compact 和 Regular,若是不区分设备则是 Any 。
实际操作中,SizeClass
还是不能满足需求,本来想着IPad横屏就那个尺寸,怎么发现改完之后 iPhone 有不满意了(4s,5s这些小屏幕机),而且设计同学并没有一个定性标准来确定..只是说哦这个机型好像有点小了这里,调大一点,调大一点之后,由于xib根据比例变化,另外机子上又太大了…
最后一番讨价还价还是确定了样式上线了(设计同学应该内心各种草泥马了吧…)
[上线后我发现用 xib 远古方法还是比较好调整所有机型尺寸…(AutoResize),等下个版本验证下吧]
烦人的Launch Screen Cache(Xcode 11)
还以为脱坑了…测试时候发现这次改完的新启动图 Launch Screen.storyboard
打包之后给测试同学升级安装 , 启动图还是旧的. Google 了一下网上也有人遇到类似情况,说只需要把 App卸载之后重新开机再装就好了…我特么???还有这种操作?
一开始我还以为只是测试包有这个问题,上线Appstore应该苹果会弄好吧..越接近发包时间越心虚,各种搜索网上方法.
如:
- 替换 .xcasset 里面素材名字
- 将素材放到bundle里面
- 删掉改名
Launch Screen.stroyboard
相信我,上面各种操作试过也是一样,此时心里没底了..是不是Appstore后才正常…在怀着最后一丝希望时候找到一行代码
1 | NSError *error; |
删除缓存操作.看了下路径在 NSHomeDirectory
下,我想这路径下没这个东西啊…然后抱着怀疑心态插上手机试下,走到 error
时候的确是说没有这个文件…以为这个方法是不行的
此时已经崩溃,说出一句
“SB苹果!”
心怀希望觉得应该是Appstore上线后会好的..然而上线之后…
Surprise Mother F***er!!
启动图只要是旧版本升级上来也是没变….此时怀着曹尼玛心情过年
直到今天才发现上面那句代码是有用的…..
因为最近发个小包,启动图问题还是有,试过所有方法且做了无限搜索,发现最近更新的信息中,好像都是指向那句代码,让我只能重新一试
在 finishLaunch
中添加这句代码,联机Debug依然是说没有..
好吧打个包试下?
然而
Surprise Mother F***er!!
在升级后第一次启动还是原图后,第二次竟然是刷新了…
此时说出一句
“SB苹果!”
“SB苹果!”
“SB苹果!”
别问为什么联机调试找不到文件删除 && 没效果,别问,问就是玄学!!!!
好了有了以上 LaunchSreen
的踩坑经历,总结下来就是这句代码牛逼!
1 | NSError *error; |
导致这个缓存的问题,是苹果官方的Bug,系统默认加载启动图的缓存,所以即使你怎么调整素材,名字还是会遇到这个问题的,希望上面这段代码拯救到你的崩溃
iOS LaunchScreen 适配与缓存踩坑