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为每个设备维度和启动方向定义特定的静态图像。 / p>
现在我正在尝试定义一个类似于LaunchImage资产目录的启动屏幕文件,但我很难做到这一点。特别是:
1)我没有看到根据设备的确切尺寸选择不同的UIImage的好方法,例如:向iPhone 4S用户显示一个图像,向iPhone 5用户显示另一个图像。
2)我没有办法为iPad Portrait和iPad Landscape视图选择不同的UIImage。大小类似乎认为iPad Portrait和iPad Landscape都是“Regular”宽度和“Regular”高度,因此任何出现在iPad Portrait上的UIImage也会出现在iPad Landscape中。
答案 0 :(得分:4)
系统在启动应用程序之前加载启动文件,这会对其包含的内容产生一些限制(其中一些可能会强制您回到静态图像文件):
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设备将回退到启动图像。
答案 1 :(得分:2)
答案 2 :(得分:2)
您可以使用尺寸类为不同的屏幕尺寸指定不同的图像,但这不能帮助您处理iPhone 4S和iPhone 5屏幕的情况
答案 3 :(得分:0)
这是适用于iPad的解决方案,
对于iPhone,您可以使用大小类,我不会在此处发布该解决方案。
解决方案是将启动画面图像分解为组件,并使用约束来操纵Portrait与Landscape的图像。
这是我如何做到的一个例子。
为iPad创建启动故事板
UILaunchStoryboardName~ipad(UILaunchStoryboardName~iphone)
在我的案例中拍摄风景照片2048x1536
我拍摄了风景图片并将其剪切成三个
在发布故事板上,我使用以下约束创建了3个图像视图
中心篇:
左和右右图:
然后,对于左右视图的模式,我将其从宽高比填充更改为右下角和左下角(对我来说效果最佳)
我知道这对于应该简单的事情来说似乎有些过分。我使用发布故事板而不是发布图像的原因是减少了应用程序的大小。我需要更少的启动图像,我可以使用jpeg而不是png
答案 4 :(得分:0)
另一种方法是使用间隔视图将正确的图像放置在可见区域中,并将另一图像移出屏幕(请参阅我对类似问题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)配置图像。