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

2023-12-28

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

请注意,此错误仅在应用程序运行时发生部署目标被设定为6.0 或 6.1.

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

This issue is tested and happens both in Xcode 6.0.1 and 6.1 GM seed 2.

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

如果有人有兴趣,以下是重现此问题的步骤:

  1. Install Xcode 6

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

  3. 更改应用程序的部署目标 to 6.0 或 6.1.

  4. Add 1x, 2x and 3x图像的版本资产目录.

  5. In 界面构建器, add a UIImageView到默认故事板的默认视图控制器的视图。

  6. In 界面构建器,将图片名称设置为与第4步在资源目录中添加的图片名称相同。

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

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

  9. 运行项目。


UPDATE:

正如 @Andrei Mankevich 在评论中提到的,这个错误似乎已在iOS 8.1.

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

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


经过一些研究,这个问题似乎确实与 iOS 有关,因此不太可能通过即将推出的 Xcode 更新来解决。这就是文档所说的资产目录 https://developer.apple.com/library/ios/recipes/xcode_help-image_catalog-1.0/Recipe.html:

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐