故事板,UIImageView。从包

时间:2016-12-20 15:07:41

标签: ios uiimageview storyboard bundle assets

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

正如我所能找到的,没有办法在故事板中设置不同包的图像。

我创建了UIImageView扩展,但不要考虑最好的解决方案。

是否存在在不同捆绑的故事板中使用资产的方法?

感谢。

1 个答案:

答案 0 :(得分:0)

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

  1. 创建一个框架项目来容纳您的共享图像(也非常适合共享代码!):文件>新建>项目> iOS> Cocoa Touch Framework
  2. 在框架文件>新建>文件> iOS>资源>资产目录中创建新的资产目录。
  3. 将图像导入资产目录。
  4. 创建新的工作区:文件>新建>工作区
  5. 将您的应用程序和框架都添加到工作区:文件>将文件添加到WorkspaceName
  6. 将该框架作为“嵌入式二进制文件”包含在应用程序的项目中:单击项目导航器中的蓝色项目文件图标,转到常规项目设置并找到嵌入式二进制文件强>。点击 + ,然后从列表中选择框架(例如ExampleFramework.framework)。

以上内容足以使您能够在使用代码调用框架时使用框架资产目录中的图像...

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

...但是,要在故事板或XIB 中使用它,还需要再执行一步。虽然现在可以从Interface Builder中选择图像名称(甚至在选择时显示在其中),但情节提要只能引用它们自己的包,因此在应用程序运行时会出现以下错误,并且图像将丢失:< / p>

  

无法加载从笔尖引用的“ ImageName”图像   标识符为“ BundleName”的捆绑软件

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

enter image description here

这将在应用的主捆绑包中为框架中的资产目录创建一个引用,但不会创建重复的引用。

完成此操作后,就可以像使用故事板和XIB中的其他图像一样使用该目录中的图像。

老实说,我不能保证这是否是一种最佳实践,但这是我发现实现我认为也是最小化项目之间重复的明智方法的唯一途径。如果您有兴趣,我已经发布了一个问题here,以尝试确定这是否导致构建资产重复。