# ios8以后设置启动图

## iOS8之前启动图使用的是静态启动图片

启动图片是iOS加载App的时候系统响应的直观呈现。近几年，随着屏幕尺寸的增多，制作相应的静态图片就变成一件十分让人头疼的事。常用机型启动图片的尺寸列举:

| 型号                   | 尺寸          |
| -------------------- | ----------- |
| iPhone 4s            | 640 x 960   |
| iPhone 5             | 640 x 1136  |
| iPhone 6 & 7         | 750 x 1334  |
| iPhone 6Plus & 7Plus | 1242 x 2208 |

## Xcode 6 & iOS8开始允许使用NIB或storyboard launch screen 文件加载启动图.

利用auto layout 和size classes的优势，一个单独的NIB或storyboard文件在runtime时可以自动的去创建启动图片集。这样支持多尺寸屏幕时,无需提供上面列举的不同尺寸的静态图片.

1.创建.xib/.storyboard 文件

Xcode6在创建新工程时默认添加了一个LaunchScreen.xib文件。对一个已经存在的工程可以用Launch Screen 模板创建一个新的文件。

这一步将会在工程中添加一个NIB文件(在Xcode7里，默认添加的是LaunchScreen.storyboard文件)，可以在初始化的启动屏上添加视图或者视图控制器。

![](https://1795314173-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LAdZ7gFz4IllRQpWbzu%2F-LAdZ8MxWrHaExfP4jSI%2F-LAdZUytlZIf_nqD_ahi%2F%E5%9B%BE%E7%89%87001.png?generation=1524337094966712\&alt=media)

2.设置plist文件\
这一步将会把键 Launch screen interface file base name(UILaunchStoryboardName)加到应用的plist 文件中

![](https://1795314173-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LAdZ7gFz4IllRQpWbzu%2F-LAdZ8MxWrHaExfP4jSI%2F-LAdZV-XBrjvTJrLZ3l3%2F%E5%9B%BE%E7%89%87002.png?generation=1524337087819339\&alt=media)

3.自定义布局

在Interface Builder中可以对启动视图进行布局.将autolayout和size classes作为必选项,可以为不同的屏幕创建匹配的图片。Xcode模板提供的风格，只是对app的名称和所有权进行了布局,可以添加或删除模板上的控件来自定义加载界面.

默认模板效果图:

![](https://1795314173-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LAdZ7gFz4IllRQpWbzu%2F-LAdZ8MxWrHaExfP4jSI%2F-LAdZV0kosFgltOzfk6o%2F%E5%9B%BE%E7%89%87005.png?generation=1524337086316890\&alt=media)

## Launch Screen 的局限性

系统在启动app之前装载启动文件，在这个过程中可能对app包含的一些文件产生限制:

1.由于app还没装载完毕，一些视图的层级结构还不存在，系统不能调用app中任何自定义的视图控制器去启动代码.因此仅仅能使用标准的UIKit类，所以可以用UIView或者UIViewController,自定义的子类则不可以。如果尝试着去设置子类，将会得到一个“配置无效”的错误。

2.启动文件仅仅能够用基础的UIKit视图，像UIImageView 和UILabel，不能使用 UIWebView。\
如果你用了storyboard，你可以指定多个视图控制器，但是仍旧有一些限制。例如，你可以在navagation或者tab bar controller嵌入几个视图控制器，但是一些更复杂的类，像UISplitViewController 并不起作用 (至少现在如此).

另外,尽管苹果文档中并没有清楚地说明，但需要的启动图片在runtime时被生成了。在WWDC 2014\
Platform State of the Union上被简短的提到过。可以通过App在真机或者模拟器上生成的文件夹证实。被特定设备需要的启动图被缓存在Library/Caches/LaunchImages。
