- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的问题是:我有几个共享 xcassets 的项目/目标。我想要做的是在没有代码的情况下在 Storyboard中设置图像。
正如我所发现的,无法在 Storyboard中设置来自不同包的图像。
我创建了 UIImageView 扩展,但没有想到最好的解决方案。
有没有一种方法可以在 Storyboard中使用来自不同包的 Assets ?
谢谢。
最佳答案
因此,基于对 this question 的回答,我确实知道一种解决方案。听起来您已经完成了其中的一些工作,但只是为了给出完整的答案:
以上内容应该足以让您在使用代码调用时使用框架 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
文件)从框架拖到应用程序项目本身的某个位置(例如项目的根文件夹)。在出现的对话框中,确保您的应用已在添加到目标列表中选中,并保留以下选项未选中。
这将在您的应用程序的主包中创建一个对框架中 Assets 目录的引用,但不会创建它的副本。
一旦完成,您就可以像使用 Storyboard和 XIB 中的任何其他图像一样使用该目录中的图像。
老实说,我不能保证这是否是最佳做法,但这是我发现的实现我认为也是最大程度减少项目重复的明智方法的唯一方法。如果您有兴趣,我已经发布了一个问题 here尝试确定这是否会导致构建 Assets 的任何重复。
关于ios - Storyboard,UIImageView。从包中加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41245422/
我是一名优秀的程序员,十分优秀!