静态库,捆绑和IB可设计

时间:2014-11-28 11:02:45

标签: ios storyboard bundle 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

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

2 个答案:

答案 0 :(得分:4)

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

这不是一个很好的答案,但我想提供一些有关原因的背景信息。

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

您可以看到Interface Builder没有加载您的应用程序,只包含具有以下步骤的各个框架:

  1. 创建一个新的Xcode项目
  2. 在项目中创建新的框架目标
  3. 添加IBDesignable
  4. 的课程
  5. 在应用中的故事板中创建一个视图并将其类设置为框架的IBDesignable
  6. 点击“编辑器”菜单中的“刷新所有视图”
  7. 在项目的DerivedData文件夹中,在IBDesignables目录中,您可以看到只构建了您的框架目标。
  8. 接口构建器实际上使用dlopen手动加载框架。您还可以看到,为了在构建框架时提供此功能,Interface Builder实际上会在您的二进制文件中添加2 RPATH,因此可以在自定义路径中找到依赖关系(您可以使用otool -L frameworkbinary查看) 。静态库无法使用这种加载二进制文件的方法。

    对于它的价值,我认为最好的解决方法是构建动态框架,而不是静态库,但{em>仅用于IBDesignable版本。你必须做一些配置工作才能做到这一点,要解决这个问题并不容易解决这个问题,但是如果你尝试它,你可以使用构建路径或环境来区分{{ 1}}构建vs“普通”构建。

答案 1 :(得分:-2)

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

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

这与this question

有关

以下是解决方案:

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

2)将use_frameworks!添加到Podfile

查看更多here