ios - Storyboard,UIImageView。从包中加载图像

标签 ios uiimageview storyboard bundle assets

我的问题是: 我有几个共享 xcassets 的项目/目标。 我想要做的是在没有代码的情况下在 Storyboard中设置图像。

正如我所发现的,无法在 Storyboard中设置来自不同包的图像。

我创建了 UIImageView 扩展,但没有想到最好的解决方案。

有没有一种方法可以在 Storyboard中使用来自不同包的 Assets ?

谢谢。

最佳答案

因此,基于对 this question 的回答,我确实知道一种解决方案。听起来您已经完成了其中的一些工作,但只是为了给出完整的答案:

  1. 创建一个框架项目来存放您共享的图像(它也非常适合共享代码!):File > New > Project > iOS > Cocoa Touch Framework
  2. File > New > File > iOS > Resource > Asset Catalogue 框架内创建一个新的 Assets 目录。
  3. 将您的图像导入 Assets 目录。
  4. 创建一个新工作区:文件 > 新建 > 工作区
  5. 将您的应用和框架添加到工作区:文件 > 将文件添加到工作区名称
  6. 将框架作为“嵌入式二进制文件”包含在应用项目中:点击项目导航器中的蓝色项目文件图标,转到常规项目设置并找到嵌入式二进制文件.点击 + 并从列表中选择框架(例如 ExampleFramework.framework)。

以上内容应该足以让您在使用代码调用时使用框架 Assets 目录中的图像...

let frameworkBundle = Bundle(for: FrameWorkClass.self)
guard let image = UIImage(named: "MyImage", in: frameworkBundle, compatibileWith: nil) else { ... }

...但是,要在 Storyboard或 XIB 中使用它,还需要一个步骤。虽然图像名称现在可以从 Interface Builder 中选择(甚至在选择时显示在那里), Storyboard只能引用它们自己的包,因此当应用程序运行时它会给你以下错误,并且图像将丢失:

Could not load the "ImageName" image referenced from a nib in the bundle with identifier "BundleName"

要解决此问题,您需要转到工作区的导航器(左面板)并将 Assets 目录(即 .xcassets 文件)从框架拖到应用程序项目本身的某个位置(例如项目的根文件夹)。 在出现的对话框中,确保您的应用已在添加到目标列表中选中,并保留以下选项未选中

enter image description here

这将在您的应用程序的主包中创建一个对框架中 Assets 目录的引用,但不会创建它的副本。

一旦完成,您就可以像使用 Storyboard和 XIB 中的任何其他图像一样使用该目录中的图像。

老实说,我不能保证这是否是最佳做法,但这是我发现的实现我认为也是最大程度减少项目重复的明智方法的唯一方法。如果您有兴趣,我已经发布了一个问题 here尝试确定这是否会导致构建 Assets 的任何重复。

关于ios - Storyboard,UIImageView。从包中加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41245422/

相关文章:

ios - 访问 segue 中的导航 Controller 'target' 的属性

iphone - 带有CustomUIButton的.shadowColor问题

ios - 音频切割器原生 iOS 元素

ios - 未设置 UIImageView 图像

ios - 导航堆栈在运行时重新排序/重新安排场景

ios - 如何使用 UIImageView iOS 中的启动图像集?

ios - 无法将 iOS 平台添加到 ionic 应用程序,Mac OS

ios - 是否可以使用断点来发现下一个执行的代码

ios - 使用 UIImageView 或 UIView 快速绘图

ios - 如何在 Swift 中使用 UIImageView 设置背景图片