【问题标题】:Images not showing in iOS 7.1 with XCode 6 / Swift带有 XCode 6 / Swift 的 iOS 7.1 中未显示图像
【发布时间】:2014-07-26 15:47:56
【问题描述】:

我有这个 ObjC 代码:

[self.myButton setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@-button", self.myObject.name]]
                         forState:UIControlStateNormal];

这很适合这些组合:

  • XCode 5,iOS 7.1
  • XCode 6,iOS 7.1
  • XCode 6,iOS 8

但是,当我将项目的一个类移植到 Swift(与此代码中发生的任何事情无关的类)时,图像不会显示在 iOS 7.1 的 XCode 6 中。它适用于 XCode 6 和 iOS 8。

我完成了整个项目到 Swift 的移植,所以现在代码如下:

self.myButton.setBackgroundImage(
    UIImage(named:self.myObject.name + "-button"),
    forState: UIControlState.Normal
)

在 iOS 7.1 上它仍然不满意。仍然没有图像。 (虽然自定义图标有效。)是的,我知道这只是测试版软件,它可能只是一个错误......?但我只是想知道是否有人有解决方案或见解。

我大约一周前才开始使用 XCode 和 ObjC(惊喜!ObjC 现在已被弃用!),所以可能是我遗漏了一些东西,但由于它在 ObjC 和 Swift+iOS8 中工作,看起来像这可能是一个错误。

【问题讨论】:

  • 尝试在图片名称末尾添加扩展名。我已经看到解决了 Swift 代码的一些问题...
  • 谁说 Objective-C 被弃用了?
  • Objective-C 没有被弃用,你现在只有两个不同的选项来编写你的 iOS/OSX 应用程序。
  • Objective-C 说 “谢谢你,我还很好,我一点也不反对!”.
  • Pascal 在 Mac OS 上也从未真正被弃用,是吗?我不是字面上的意思。但写在墙上。这需要几年时间,但在某个时候,没有人会在 ObjC 中进行新的开发。

标签: xcode ios7 swift


【解决方案1】:

我已经通过不使用资产库来存储我的图像来克服这个问题。

使用“旧样式命名”将您的图像添加到项目中,例如 Image.pngImage@2x.png,然后在没有任何扩展名的情况下加载它们文件名,如:

let myImage = UIImage(named:"Image")

【讨论】:

  • 我也找到了唯一的解决方案
【解决方案2】:

固定在XCode 6 beta 2

来自项目中资产目录的图像,最低部署目标为 iOS 7 或 OS X 10.9 将在 iOS 8 和 OS X 10.10 上运行时可用,现在也可以在 iOS 7 和 OS X 上运行 10.9。 (17029658)

release xcode 6 beta 2 notes

【讨论】:

  • 完美!刚刚下载了 XCode 6 Beta 2,将我的 PNG 添加到资产目录,在我的按钮中使用了图像,一切都在我的 iOS 7 设备上正确显示。
  • 带有 Xcode 6 beta 2 的 iOS 8 模拟器仍然无法运行,但在 iOS7 模拟器上 Xcode 6 beta 2 可以运行
  • 所有这些(iOS 7、iOS 7.1、iOS 8)在 XCode 6 Beta 2 中都适用于我。尝试创建新项目并在那里进行测试。
  • 在 Xocde 6 beta 6 中损坏
  • 如果未将 png 文件添加到资产目录,图像会不会工作?
【解决方案3】:

对我来说,这是因为我突然将 jpg 图像添加到 Image Assets。只需将其重新保存为 png 并且一切正常

【讨论】:

  • 荒谬。我做了同样的事情,它奏效了。看起来像一个错误?还是他们只想使用 PNG 文件?
【解决方案4】:

我猜你正在模拟器上测试它。确保将所需图像复制到 7.1 捆绑包。为此,请检查copy resources bundle 构建阶段或在~/Library/Application Support/iPhone Simulator/ 手动检查不同模拟器的应用程序包。

【讨论】:

  • 实际上它在 7.1 模拟器和我的 7.1 设备上都有。但是检查你现在所说的......
  • 我查看主项目窗口并查看 Copy Bundle Resources,Images.xcassets 在那里。它必须是,对,否则它不会在 iOS 8 中显示?我确实在 iOS 7.1 和 iOS 8 设备中看到了 Assets.car,它是完全相同的文件(检查了 md5)。所以这似乎不是问题。显然在 XCode 6 中,它在 ~/Library/Developer/CoreSimulator/Devices/DEVICE_ID/data/Containers/Bundle/Application/APP_ID/APP_NAME.app/ 对于 iOS 8 和 ~/Library/Developer/CoreSimulator/Devices/DEVICE_ID /data/Applications/APP_ID/APP_NAME.app/ 适用于 iOS 7.1。)
【解决方案5】:

@o KB o 指出 here Xcode6 Beta release notes 提到 iOS7 不支持 xcassets 捆绑包。此外,我发现在您的项目中摆脱资产包非常困难。如果您的图像与捆绑包中的图像具有相同的名称,这可能会导致命名冲突(您可能想要相同的名称,因此您不必在代码/IB 中的任何地方重命名图像)。

这里有一个解决方法:

  1. 将每个图像从您的.xcassets 图像包复制到一个新目录(我们称之为Images/)。请参阅下面的脚本以简化此操作。
  2. 删除您的.xcassets 捆绑包。 (令人惊讶的是,从项目中删除它是不够的。在我的测试中,如果 .xcassets 包与 Xcode 项目或相关源位于同一目录中的任何位置,它将被复制进去。或者,您可以删除 .xcassets 扩展)
  3. 将所有图像文件添加到 Xcode 项目中
  4. 清理(cmd + shift + k)
  5. 从目标设备或模拟器中删除应用
  6. 安装并运行

为了减少第 1 步的繁琐,我编写了一个脚本,将图像从 .xcassets 捆绑包中复制到您选择的目录中:https://github.com/johnboiles/xcasset_exporter

mkdir Images
./xcasset_exporter.py MyProject/Images.xcassets Images

【讨论】:

    【解决方案6】:

    我遇到了一个问题,即 xcassets 中的 一些 图像可以正常工作,而其他图片则不能(仅适用于 iOS 7.1)。 我通过删除有问题的图像集并创建具有不同名称的新图像集来解决它。

    【讨论】:

      【解决方案7】:

      如果您尝试使用 external bundle 并将适当的 PNG 图像存储在“旧样式”文件夹或 xcassets 中,则在 iOS 7 上运行的应用程序将 无法访问这些图片。

      我在这里尝试了另一个答案的建议,以在外部包中添加图像的“旧样式”文件夹路径,但这对我不起作用。我的解决方案适合我的场景,是在外部包内的 nib 中为资源公开一个出口。这允许主应用程序设置一个可访问的图像。在 iOS 7 中使用外部捆绑包中包含的 nib 时,这是一个 bug 还是仅仅是一个限制,随着使用量的日落,它的影响将变得不那么重要......

      PS:在 iOS 8 上运行的应用程序能够访问外部捆绑 xcassets 中的图像就好了,所以选择你的毒药来支持 iOS 7。

      【讨论】:

        猜你喜欢
        • 2014-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-24
        • 1970-01-01
        • 1970-01-01
        • 2016-02-01
        • 1970-01-01
        相关资源
        最近更新 更多