iOS启动页国际化
2018-03-26 本文已影响417人
似奔跑的野马
最近在做国际化项目,遇到需要国际化启动照片。国际化启动照片有2种方式。
方式1.根据不同的启动语言,配置不同的启动storyboard。
方式2.通过UILaunchImags,进行配置对应的启动照片。
下面进入主题,先说说如何使用storyboard。
1.在info.plist文件中,如图:
选中
Show Raw keys/values
,加入UILaunchStoryboardName 对应的key。配置对应的启动storyboard
2.创建对应语言启动的storyboard,如LaunchScreen-cn.storyboard,以及LaunchScreen-en.storyboard.在storyboard中添加一个控制器,并且设置为
Is Initial View Controller
。创建的启动故事板
3.在项目中创建 InfoPlist.strings文件(记住文件名不能改,否则不生效)。
点击InfoPlist.strings,点击右边的localization,初始化对应的语言版本。
如我选择了英文和简体中文,得到如下,
不同的本地化文件
点击对应的文件编辑如下对应的启动storyboard。
UILaunchStoryboardName = "LaunchScreen-English";
此时大功告成,卸载掉app,重新启动就可以看见你设置的不同启动页了。
关于启动页原理,就是本地生成了一张照片,有兴趣的可以用模拟器运行,然后到沙河看看。
用storyboard启动是不是很简单。
NOTE:关于启动页的控制器能不能初始化子控制器,答案是不能。原因,借用stackoverflow的一段解释
Note that you can not add any other custom class to LaunchScreen. It is an ViewController to just show while app is about to start. In this phase of app life cycle nothing has yet been started. Its almost similar to static image ( It used to be only static image till iOS7 ). Starting for iOS9 or XCode 7 only it was changed to storyboard previously it used to be XIB file. Hence you can not add custom class objects to LaunchScreen as this is a phase where app is still to be loaded or started.
简单解释下,就是说启动页开始时,app还没有进入运行循环(什么是运行循环,此处不做解释),单纯加载了一张静态照片。
如果你强制会报错。
子类化启动storyboard
最后补充下。关于Xcode9适配iOS8,创建storyboard去掉 use safe Area Layout Guides
,就好了。
关于UILaunchImages国际化,我就不再累赘了。感兴趣的可以看,讲的很仔细。
在此说明关于app名以及字符串国际化,可以参照一张思维导图。国际化思维导图