加载图片时候 如果不使用bundle 会使组件内部的图片名和工程main.bundle图片资源出现冲突 ,如果使用了新建的 bundle 存放资源 则可以解决图片资源冲突问题 ,但是却出现了另一个问题 那就是 xib 无法加载图片,必须在 xib 使用图片资源时候 需要知道 budle路径+图片名
这样在 xib 上无法查看图片资源 即使运行程序时候 能够加载出来图片资源 但对于 xib 布局有所影响 ,因为UIImageView UIbutton 可以根据图片尺寸 自适应控件的宽度和高度.
如果不使用 NSBundle 直接将图片资源添加到组件内部 ,那么在编译完成后 图片名 会被存放在 main.bundle 中 ,无疑会将与存放在宿主工程里的图片名 发生冲突,即使使用 .xcassets 也会被合并到 main.budle目录中Asset.car 文件中
为了既可以在 xib 中显示图片资源 ,又能避免组件内部图片和 main.bundle下图片资源冲突,可以将 组件内部的xib 和组件内部图片资源 放到同一个 budle 文件夹下 ,这样 xib 读取图片是 xib 所在 bundle 文件夹下边的图片.就可以在 xib 上直接显示该图片
s.resource_bundles = {
'AppraiseModule' => ['AppraiseModule/Resources/**/*.png','AppraiseModule/Classes/**/*.{xib}']
}
如果你使用了代码去加载 xib 时候 需要
NSBundle *mainBundle = [NSBundle mainBundle];
NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"AppraiseModule" ofType:@"bundle"]];
FRPublishAppraiseViewController *publishVC = [[FRPublishAppraiseViewController alloc] initWithNibName:@"FRPublishAppraiseViewController" bundle:resourcesBundle];
[self presentViewController:publishVC animated:YES completion:nil];
如果你使用代码加载图片
NSBundle *mainBundle = [NSBundle bundleForClass:[self class]];
NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"AppraiseModule" ofType:@"bundle"]];
[UIImage imageNamed:@"report_triangle_passer" inBundle: resourcesBundle compatibleWithTraitCollection:nil]