在iPhone 6或5S上错误地使用@ 3x图像或在XIB中使用“用作启动图像”选项集

有了一个干净的全新iOS项目,我:

  • 在项目“background@2x.png”和“background@3x.png”中添加了2张图片
  • 添加了一个名为“LaunchScreen.xib”的XIB
  • 检查了XIB的“用作启动屏幕”选项
  • 为LaunchScreen.xib添加了一个UIView子视图,并将其图像名称设置为“background.png”
  • 在项目设置中,在目标“常规”设置下,我将“启动屏幕文件”设置为“LaunchScreen”

现在,当我在下面的任何设备列表上启动应用程序时,@ 3x图像会显示在生成的启动屏幕中,当然应该使用@ 2x图像。

问题设备(全部使用@ 3x资源):

  • iPhone 5(iOS 8.0.0)
  • iPhone 6(iOS 8.0.0)
  • iPhone 6(iOS 8.0.2)
  • iPhone 5模拟器(iOS 8.0.0)
  • iPhone 6模拟器(iOS 8.0.0)

请注意,@ 2x图像与@ 3x图像不同,因此我可以轻松识别正在使用的图像。

起初我认为这是模拟器的一个错误,并且当它在真实设备上发生时也是错开的。

我认为这是另一个iOS8错误,但我想也有可能它的预期行为作为启动屏幕的结果被缓存为某种静态图像。

任何想法或潜在解决方案?

编辑:

为了其他人的利益,我后来发现,如果将图像添加到Images.xcassets图像集中,则实际上会观察到正确的行为。 然而,这对我们来说不是一个理想的解决方案,因为我们有一个非常具体的图像导出过程,这意味着我们没有在项目中使用Images.xcassets(应用程序中有数千个图像)。

我现在也用Apple#18513968举起了雷达

http://openradar.appspot.com/18513968

我自己试过这个,并且得到你提到的相同的行为。

通过将“启动图像源”设置为“使用资产目录”,并添加“启动图像”,您可以使每个设备显示其特定背景。 这里有一些截图:

支持iPhone 6和iPhone 6+,具有不同的启动/启动屏幕图像,适用于iPad纵向和横向方向

再看一下,我发现一个网站提到:

http://oleb.net/blog/2014/08/replacing-launch-images-with-storyboards/

“您可以使用Interface Builder中的新自适应UIfunction使您的布局适合不同的屏幕尺寸。如果您的场景需要特定于屏幕尺寸的图像,请使用资产目录来定义每个尺寸类别的不同图像。”

也许这是唯一的方法。