当应用程序的部署目标设置为6.0或6.1时,Xcode 6会错误地加载3x图像

时间:2014-10-13 05:14:34

标签: xcode ios8 resolution deployment-target

在xcode的界面构建器中在storyboard(或xib)中构建UI时遇到此问题。将图像(在资产目录中具有相同名称)分配给Interface Builder中的图像视图后,xcode在运行ios8的任何非retinahd设备中加载 3x 图像文件而不是2x。

请注意,此错误仅在应用的部署目标设置为 6.0或6.1 时发生。

我正在使用资产目录来管理图像资源。

此问题已在Xcode 6.0.1和 6.1 GM seed 2 中进行测试和发生。

我搜索了这个问题,很少找到相关主题。所以我想知道是否有人与我有同样的问题,最好的解决方法是什么。谢谢。

以下是在有人感兴趣的情况下重现此问题的步骤:

  1. 安装 Xcode 6

  2. 创建iOS项目并设置为使用 objective-c 作为项目语言。

  3. 将应用的部署目标更改为 6.0或6.1

  4. 1x 2x 3x 版本的图片添加到资产目录

  5. 界面构建器中,将UIImageView添加到默认视图控制器的默认情节提要视图中。

  6. 界面构建器中,将图像名称设置为资产目录中步骤4中添加的相同图像名称。

  7. 选择模拟器为iPhone6(或任何模拟器在 iOS 8.0 上运行,但iPhone6 Plus除外)。

  8. 清理项目(产品/清洁)。

  9. 运行项目。


  10. 更新

    正如@Andrei Mankevich在评论中提到的,这个错误似乎在 iOS 8.1 中得到修复。

    我已经使用在 Xcode 6.1 GM种子2 中运行 iOS 8.1 的模拟器确认了它(抱歉我目前没有运行iOS 8.1的真实设备)。

    正如@Andrei Mankevich所指出的,这个bug可能只存在于iOS 8.0.x中。

1 个答案:

答案 0 :(得分:0)

经过一些研究后,看起来这个问题确实与iOS有关,所以即将推出的Xcode更新也无法解决这个问题。这是关于Asset Catalog的文档说明的内容:

  

对于部署目标至少为iOS 7或OS X 10.9的项目,Xcode会将您的资产目录编译为运行时二进制文件格式,从而缩短应用程序的下载时间。

因此,当我们使用部署目标时,6.0资源只是以不同的方式存储在IPA文件中。虽然iOS 8.0正确加载编译资源,但它存在加载非编译资源并始终加载3x密度图像的问题。此问题已在iOS 8.1中修复。

至于我们的应用程序中可能的解决方法,我们通过设置xib中每个元素的确切大小并使用UIViewContentModeScaleAspectFit标记contentMode值来修复它。我们使用具有不同分辨率的相同图像资源,因此在缩放后它们看起来也相同。但当然它应该对性能产生负面影响。