在xcode的界面构建器中在storyboard(或xib)中构建UI时遇到此问题。将图像(在资产目录中具有相同名称)分配给Interface Builder中的图像视图后,xcode在运行ios8的任何非retinahd设备中加载 3x 图像文件而不是2x。
请注意,此错误仅在应用的部署目标设置为 6.0或6.1 时发生。
我正在使用资产目录来管理图像资源。
此问题已在Xcode 6.0.1和 6.1 GM seed 2 中进行测试和发生。
我搜索了这个问题,很少找到相关主题。所以我想知道是否有人与我有同样的问题,最好的解决方法是什么。谢谢。
以下是在有人感兴趣的情况下重现此问题的步骤:
安装 Xcode 6
创建iOS项目并设置为使用 objective-c 作为项目语言。
将应用的部署目标更改为 6.0或6.1 。
将 1x , 2x 和 3x 版本的图片添加到资产目录。
在界面构建器中,将UIImageView
添加到默认视图控制器的默认情节提要视图中。
在界面构建器中,将图像名称设置为资产目录中步骤4中添加的相同图像名称。
选择模拟器为iPhone6(或任何模拟器在 iOS 8.0 上运行,但iPhone6 Plus除外)。
清理项目(产品/清洁)。
运行项目。
更新:
正如@Andrei Mankevich在评论中提到的,这个错误似乎在 iOS 8.1 中得到修复。
我已经使用在 Xcode 6.1 GM种子2 中运行 iOS 8.1 的模拟器确认了它(抱歉我目前没有运行iOS 8.1的真实设备)。
正如@Andrei Mankevich所指出的,这个bug可能只存在于iOS 8.0.x中。
答案 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
值来修复它。我们使用具有不同分辨率的相同图像资源,因此在缩放后它们看起来也相同。但当然它应该对性能产生负面影响。