UIImage "imageNamed:" 适用于 iOS 8,但不适用于 7?

UIImage "imageNamed:" works on iOS 8, but not 7?

SO 上 several answers 已经有大约 "imageNamed:" 不工作,但 none 包括了我的特殊皱纹:

我在 iOS 7 上从 "imageNamed:" 得到 nil,但同样的构建在 iOS 8.

显然,所有内容都已正确连接,因为它确实适用于 iOS 8,但它始终如一地 returns nil returns nil iOS 7. 值得注意的是,我在开始时将资产移到了 AssetCatalog 中。 iOS 7 上的资产目录是否存在某些必须考虑的异常行为?

根据对本网站类似问题的回答,以下是一些详细信息:

到目前为止,关于 SO 的大部分答案都是针对会阻止它工作的错误根本。任何人都可以帮助进行仅适用于 iOS 8 的图像调用吗?

您可以尝试以下步骤:

  1. 清理您的项目 (Cmd+Shift+K) 并再次 运行。

  2. 添加其他图像(不是@2x、@3x)并检查它是否有效。

  3. 创建一个新项目并检查 UIImage imagedName 是否可以与 iOS7/8 一起使用。

对于一些问题,我们不需要尝试寻找根本原因,只需跳过它然后继续:)

嗯。显然,解决方案是,如果资产目录中的图像集名称中有文件后缀,iOS 7 就会出错。我们的资产目录中的每个文件都有多个版本,相同的图像但用途不同,所以我的同事用旧文件名命名它们,如下所示:

"RedBall.png - Small" (includes 25px, 50px, 75px)
"RedBall.png - Large" (includes 150px, 300px, 450px)
"BlueBall.png - Small"
"BlueBall.png - Large"

显然 iOS 8 足够聪明,可以识别出 "RedBall.png - Small" 是名称,而 iOS 7 不知道当“.png”就在那里时该怎么做中间.

正在将文件重命名为...

"RedBall - Small"
"RedBall - Large"
"BlueBall - Small"
"BlueBall - Large"

...似乎可以解决问题。