In order to get iPad Pro to use full resolution at launch, we have to use a Launch Screen File。
我之前从未使用过Launch Screen XIB / Storyboard,因为我的应用程序向后兼容iOS 7.通常我使用LaunchImage asset catalog为每个设备维度和启动方向定义特定的静态图像。
现在我正在尝试定义一个类似于LaunchImage资产目录的启动屏幕文件,但我很难做到这一点。特别是:
1)根据设备的确切尺寸,我没有看到选择不同UIImage的好方法,例如:向iPhone 4S用户显示一个图像,向iPhone 5用户显示另一个图像。
2)我没有办法为iPad Portrait和iPad Landscape视图选择不同的UIImage。大小类似乎认为iPad Portrait和iPad Landscape都是“Regular”宽度和“Regular”高度,因此任何出现在iPad Portrait上的UIImage也会出现在iPad Landscape中。
系统在启动应用程序之前加载启动文件,这会对它可以包含的内容产生一些限制(其中一些可能会强制您回到静态图像文件):
1.应用程序尚未加载,因此视图层次结构不存在,系统无法调用您在应用程序中可能具有的任何自定义视图控制器设置代码(例如viewDidLoad)
2.您只能使用标准的UIKit类,因此您可以使用UIView或UIViewController,但不能使用自定义子类。如果您尝试设置自定义类,您将在Xcode中收到非法配置错误。
3.启动文件只能使用基本的UIKit视图,如UIImageView和UILabel。您不能使用UIWebView。
4.如果您使用的是故事板,则可以指定多个视图控制器,但还有一些限制。例如,您可以在导航或标签栏控制器中嵌入视图控制器,但更复杂的容器类(如UISplitViewController)不起作用(至少尚未使用)。
5.定位启动文件目前似乎没有任何效果。始终使用基本本地化,因此您可能希望避免启动屏幕上的文本。
6.您无法为iPad和iPhone指定不同的启动文件。如果这些设备的界面明显不同,则可能会出现问题,因为只有这么多可以用于自动布局和大小类。
请注意,如果要部署到iOS 7,则仍需要包含静态启动映像文件。您可以包含启动图像文件和静态启动图像。运行iOS 8的iPhone 6等设备将使用启动图像文件,而iOS 7设备将回退到启动图像。
[.
希望有所帮助,我没有忘记任何事情!
您可以使用大小类为不同的屏幕尺寸指定不同的图像,但这无助于您处理iPhone 4S和iPhone 5屏幕的情况
这是一个可以工作的iPad解决方案,
对于iPhone你可以使用大小类,我不是在这里发布该解决方案。
解决方案是将启动画面图像分解为组件,并使用约束来操纵Portrait与Landscape的图像。
这是我如何做到的一个例子。
为iPad创建一个启动故事板
UILaunchStoryboardName~ipad(UILaunchStoryboardName~iphone)
在我的案例2048x1536中拍摄您的风景图像
我拍摄了风景图像并将其切成三个
在启动故事板上,我使用以下约束创建了3个图像视图
核心:
左右片:
然后对于左右视图的模式我将其从纵横填充更改为右下角和左下角(对我来说效果最好)
我知道这对于应该简单的事情来说似乎有些过分。我使用发布故事板而不是发布图像的原因是减少了应用程序的大小。我需要更少的启动图像,我可以使用jpeg而不是png
另一种方法是使用间隔视图将正确的图像定位在可见区域中并将另一个移出屏幕(请参阅我对类似问题here的原始答案)。
您无法为不同的屏幕尺寸(iPhone 4,iPhone X,...)提供不同的图像,但如果您想要iPhone和iPad的不同图像以及纵向和横向的不同图像,此解决方案适合您。
如果你想尝试一下,我创建了一个example project on github。它适用于iPad和iPhone。
重要的限制是
PortraitSpacer.width ≤ 5 × view.width
PortraitSpacer.width ≤ 5 × view.height
LandscapeSpacer.width ≥ 5 × view.width
LandscapeSpacer.width ≥ 5 × view.height
PositionSpacer.width = 5 × view.width
其中view.width
和view.height
是主视图的宽度和高度。
PortraitSpacer
将肖像图像定位在5 × min(view.width, view.height)
,LandscapeSpacer
将景观图像定位在5 × max(view.width, view.height)
,PositionSpacer
在纵向模式下具有与PortraitSpacer
相同的宽度,并且在横向模式下具有与LandscapeSpacer
相同的宽度。
我们将所有内容乘以5,这样两个图像就不会重叠。这适用于满足以下条件的所有设备
5 × min(view.width, view.height) + max(view.width, view.height) ≤ 5 × max(view.width, view.height)
在横向模式中,这意味着
5 / 4 ≤ view.width / view.height
所有现有设备的情况都是如此:iPad的纵横比最低,4:3,仍然大于5:4。
然后,您可以在资产目录中为每台设备(iPhone,iPad)配置图像。