苹果要求:2020年June 30之前必须将启动方式通过
storyboard
进行加载。具体参考官方文档(https://developer.apple.com/news/?id=03262020b)。或者可以直接看下面的截图。
注意:启动图如果设置的不正确,那么会影响自己App的主页内容。可能会产生拉伸等问题,这个会在后面详细说明。
LaunchImage
和LaunchScreen.storyboard
都是加载启动图的一种方式,但是二者有很大区别:
LaunchImage
出现的要比LaunchScreen.storyboard
早些, iOS8以后开始支持LaunchScreen.storyboard
LaunchScreen.storyboard
的默认优先级高于LaunchImage
LaunchScreen.storyboard
适配的更灵活些,类似于新做一个界面。LaunchImage
只是固定加载image set
中的几个图。二种方式尽量不要混用,会有很多不可预知的问题在真正替换之前需要做些准备工作,这里不涉及设计那边的工作,只说一下我们技术相关的。
a) 删除settiing中旧的LaunchImage加载方式设置
删除旧的LaunchImage加载方式
b)删除Asset中旧的启动图
删除Asset中旧的启动图
这些旧的启动图都要删掉,这样也可以减少包的体积,以后这些都用不上了,另外需要说一下这里的图片最大的也是375 * 812
的,这样的对于打手机例如414 * 896
的,其实主页会有一定的拉伸,最直观的感受就是UI不一样了,这个后面会详细叙述。
c)工程配置新的storyboard启动方式
下面就是在工程设置中设置新的启动方式。
设置新的storyboard启动方式
d)代码层面
其实代码层面我们开发人员可以做的已经很少或者说没有了,因为在进入app程序willFinishLaunchingWithOptions
的时候,启动图已经出来了,应该就是iOS系统对App启动图的缓存。目的就是立即显示,增强用户的体验。
是否要新加代码清除缓存,这个就看自己了,有的兄弟公司就是没加任何清除缓存的代码,我这里就清除了下/Library/SplashBoard
和/Library/Caches/Snapshots
目录里的缓存。策略就是检测版本号不同的时候启动就清除下。
这里首先是要新建一个storyboard
,直接新建就行,用苹果给提供的启动页面的storyboard
模板。
启动图的storyboard
可以当做普通页面去处理了,拖进去控件并设置约束。
下面就是处理新建的启动图的storyboard
,有几种处理方案。
这个有人这么做,就是放一张图,按比例进行填充aspect fill
。好处就是资源文件只有一张图很省空间,缺点就是不同屏幕的尺寸由于比例扩张和收缩,那么会有部分信息显示不全。
这个是新建一个图片集image set
里面放各种尺寸的iphone
和ipad
的图片。
这个方案可以很完美不会有任何拉伸问题,而且做起来开发者的工期也不需要,直接就是图片的替换。缺点就是以后机器尺寸多了就要多放图,图都是高清的,即使进行了压缩,那包的体积也会加大很多。
这个想法就是将启动图中的元素,包括logo,还有文字等单独切出来,然后像普通页面那样加载控件(UILabel、UIImageView)
等。
这解决了不同尺寸屏幕的适配问题以及包资源体积增大的问题。好处就是包体积小了适配各种机型更灵活(但是背景图还是不可避免的要失去部分显示效果),不好的地方就是以后要是换开屏图,那么就要开发者有一定的工作量进行处理。
综述,看上面三个方案,对比研究觉得最后这种方案是最靠谱的并进行了实践,这个也是苹果公司推荐的方案。
个别流海屏手机,比如xsmax 12
系统机型,使用launchScreen.storyboard
加载启动图,启动图都是正常的,但是到了主页,看见了主页被拉伸,底部的tabBar
延伸到了下面的底部,到了安全区。而且亲测在某些xsmax13
系统的机型就是正常的。
具体如下图所示:
xsmax 12系统超过安全区
想了很多,为什么启动图正常,但是主页为什么冲出去安全区了呢?而且xsmax 13
系统正常,但是只是个别的xsmax 12
系统就不正常。
查了很多资料也不知道为什么,一开始一直怀疑是启动图做的launchScreen.storyboard
哪里做的不符合苹果的需求。但是找了很久也没发现哪里不对,况且在别的机型也是正常的。
所以有一种猜想,可能是我们自己的代码出问题了。
然后我就找了我们自定义的UITabBarController
那里的代码。
发现了一处代码:
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
if (!Is375x812hScreen()) {
self.tabBar.frame = CGRectMake(0, KScreenHeight - kDSTabBarHeight, CGRectGetWidth(self.tabBar.frame), kDSTabBarHeight);
}
}
#define Is375x812hScreen() (ABS((double)[[UIScreen mainScreen] bounds].size.height - 812.f) < DBL_EPSILON || ABS((double)[[UIScreen mainScreen] bounds].size.width - 812.f) < DBL_EPSILON) //iphoneX
这里,Is375x812hScreen()
是17
年iphoneX
出来的时候加的宏,后来xsmax
等896
高的屏幕出来了,进行了更改,改宏就用来定义流海屏了,但是我用真机跑代码的时候,我发现xsmax 12
系统的手机进入了if判断语句里面,也就是说被认为了不是流海屏,而用同事的手机xsmax 13
系统手机就不会进入if语句,就可以正确被判定是流海屏。我猜想应该就是启动图加载方式变了,所以导致了流程哪里发生了改变,从而使用个别机型系统宏判断出现了错误。
于是,我就修改了下宏,如下所示:
#define Is375x812hScreen() (ABS((double)[[UIScreen mainScreen] bounds].size.height - 812.f) < DBL_EPSILON || ABS((double)[[UIScreen mainScreen] bounds].size.width - 812.f) < DBL_EPSILON || ABS((double)[[UIScreen mainScreen] bounds].size.height - 896.f) < DBL_EPSILON || ABS((double)[[UIScreen mainScreen] bounds].size.width - 896.f) < DBL_EPSILON)
宏修改成这样,xsmax 12
系统的手机就被正确认定为流海屏,主页就显示正常了,主页就不冲出安全区了。
具体如下所示:
xsmax 12系统修改后
可以看见下面的安全区留出来了。
同样检查可以看见直播间还有群组页面个别机型也是显示异常了,都需要进行特殊处理和适配,难度不大就是需要心细。
同时,替换后个人中心页面的显示正常没那么拉伸了。
替换前
替换后
其实关于黑屏可以分解成下面二个详细的小问题:
- 1) 第一个问题就是和QA模拟版本迭代升级换启动图,发现的问题,就是升级版本号换启动图都正常,但是如果降低版本号,换启动图就是黑屏了。
- 2) 给背景图
UIImageView
设置backgroundColor
保护色,图片加载不出来的时候保护色不出来的问题。
说实话这二个问题,我们开发者可以活动或者解决的余地不是很大了。
先说第一个小问题。
store
下载版本这种降版本的情况。当然这个是极特殊情况。这个黑屏问题我真的尝试了不知道多少方法了,但是都不管用:
asset
和根目录来回换launch
开头splashBoard
还有cache/snapshot
等目录缓存alpha
通道等等试了很多方法还是黑屏。只要是升高版本再降低版本,更换的启动图就不会生效,屏幕变黑。
但是这个问题真的自己无解了,毕竟我们程序员可以做的很少了,都是工程配置和一个自建立的storyboard
。storyboard
里毕竟只是imageView
的autolayout
。
所以这个问题暂时就是搁置了,只能暂时保证升级没问题就行。
下面说下第二个问题
imageView
添加个保护色吧,这样不至于黑屏看着难受,可是问题出来了,如果设置了图片,图片没加载出来,imageView
的backgroundColor
是不生效的,还是黑色的;但是如果不设置图片名字,run一下就可以看见imageView
的背景保护色了。这个问题我们也是无解的,这个像是什么呢?有点像iOS找不到图片默认给了个黑色的image
,所以后面的imageView
的背景保护色也是出不来的。
关于这个启动图的更换,想着很简单,但是却碰到了苹果的坑,在stackOverflow
上搜索,很多老外以前也遇到了这个问题。也是无解。这里其实有个解决办法,就是卸载App然后重启手机,在下载就都正常了,但是这个操作对于用户操作和体验却是致命的,不过还好版本号升级是没有问题的。猜测是苹果的缓存机制影响到的,这个需要苹果来完善了。
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。