在 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 中测试并发生。
我用谷歌搜索了这个问题,几乎找不到相关主题。所以我想知道是否有人和我遇到同样的问题,以及最好的解决方法是什么。谢谢你。
如果有人感兴趣,以下是重现此问题的步骤:
UIImageView
到默认 Storyboard的默认 View Controller View 。 更新 :
正如@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/