静态库,捆绑和IB可设计

9 bundle storyboard ios ibdesignable ibinspectable

我正在尝试在我的UIButton中使用IB Designable和IB Inspectable,但似乎有一些错误.

在问题导航器中,捆绑文件:

故事板: IB Designables:无法更新自动布局状态:无法从路径加载designabled(null)

所以我想知道是否有任何配置可以在静态库或类似的东西中使用它?

这是

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface CustomUIButton : UIButton

@property (nonatomic) IBInspectable int cornerRadius;

@end
Run Code Online (Sandbox Code Playgroud)

我想要实时渲染的自定义按钮位于视图控制器内

Kei*_*ley 5

不幸的是,它不能IBDesignables与静态库(或静态框架)一起使用。

这不是一个很好的答案,但我想说明原因。

Interface Builder 加载类以显示为可设计对象的方式似乎是通过实际动态加载您创建的动态框架(而不是您的应用程序的二进制文件),并直接使用这些类(在使用 Objective-C 运行时更改它们之后少量)。

您可以看到 Interface Builder 没有加载您的应用程序,而只是通过以下步骤加载各个框架:

  1. 创建一个新的 Xcode 项目
  2. 在项目中创建一个新的框架目标
  3. 添加一个类是 IBDesignable
  4. 在您的应用程序的故事板中创建一个视图并将其类设置为您的框架IBDesignable
  5. 单击“编辑器”菜单中的“刷新所有视图”
  6. 在项目的 DerivedData 文件夹中IBDesignables,您可以看到仅构建了您的框架目标。

界面构建器实际上使用dlopen手动加载您的框架。您还可以看到,为了在构建框架时实现这一点,Interface Builder 实际上RPATH在您的二进制文件中添加了 2秒,因此可以在自定义路径中找到依赖项(您可以使用 来查看otool -L frameworkbinary)。静态库无法使用这种加载二进制文件的方法。

就其价值而言,我认为最好的解决方法是构建动态框架,而不是静态库,但适用于IBDesignable构建。您必须做一些配置工作才能做到这一点,并且围绕 Xcode 进行这项工作并不容易,但是如果您尝试一下,您可以使用构建路径或环境来区分IBDesignable构建与“正常”构建。


Edg*_*gar -2

编辑:IB Designable 和 IB Inspectable 似乎不适用于静态库,因此如果您使用静态库,请考虑使用动态框架(仅限 iOS 8)或将组件移至静态库之外(如果可能)。

对于与 Cocoapods 相关的问题,请使用以下解决方案:

这与这个问题有关。

这是解决方案:

1)安装Cocoapods(0.36.0.beta.1)或更高版本;

2)添加use_frameworks!到您的Podfile

在这里查看更多内容。

  • 他没有具体说明他正在使用 CocoaPods。此问题似乎会影响驻留在静态库上并在其他项目的故事板或 xib 上使用的 IB_DESIGNABLES。use_frameworks!指令似乎告诉 CocoaPods 导入框架而不是静态库。 (5认同)