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

标签 xcode ios8 resolution deployment-target

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

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

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

此问题已在 Xcode 6.0.1 和 6.1 GM 种子 2 中测试并发生。

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

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

  • 安装 Xcode 6
  • 创建一个 iOS 项目并设置为使用 目标-c 作为项目语言。
  • 将应用程序的部署目标更改为 6.0 或 6.1 .
  • 将图像的 1x、2x 和 3x 版本添加到 Assets 目录 .
  • 界面生成器 , 添加 UIImageView到默认 Storyboard的默认 View Controller View 。
  • 界面生成器 , 将图片名称设置为 Assets 目录中第 4 步添加的图片名称。
  • 选择模拟器为 iPhone6(或任何模拟器在 iOS 8.0 上运行,iPhone6 Plus 除外)。
  • 清理项目 (产品/清洁)。
  • 运行项目。

  • 更新 :

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

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

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

    最佳答案

    经过一些研究,看起来这个问题确实与 iOS 相关,因此它不太可能被即将到来的 Xcode 更新修复。这就是文档对 Asset Catalog 的描述:

    For projects with a deployment target of at least iOS 7 or OS X 10.9, Xcode compiles your asset catalogs into a runtime binary file format that reduces the download time for your app.



    所以当我们使用部署目标 6.0 时,资源只是以不同的方式存储在 IPA 文件中。当 iOS 8.0 正确加载编译资源时,它存在加载非编译资源的问题,并且总是加载 3 倍密度的图像。这个问题已经在 iOS 8.1 中修复了。

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

    关于当应用程序的部署目标设置为 6.0 或 6.1 时,Xcode 6 错误地加载了 3x 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26333278/

    相关文章:

    ios - 调用目录分机的来电显示中的 UserDefaults

    ios - 我的 iOS 应用程序中的键盘在 iPhone 6 上太高了。如何在 XCode 中调整键盘的分辨率?

    ios8 - 如何取消 [GMSPlacesClient autocompleteQuery] 中正在进行的请求?

    ios - 在 Swift 中使用泛型进行类型推断

    video - 如何计算视频的分辨率?

    linux - Raspberry Pi 3-无法更改分辨率

    c - xcode上C程序的逻辑错误

    ios - Assets 图像在 Release模式下不显示

    iphone - 在iPhone中哪里使用scrollToRowAtIndexPath?

    resolution - 具有高分辨率的实时 FFT,同时保持低延迟