我试图在我的UIButton中使用IB Designable和IB Inspectable,但似乎有一些错误。
在问题导航器中,包文件:
故事板: IB Designables:无法更新自动布局状态:无法从路径加载designabled(null)
所以我想知道是否有任何配置要在静态库或类似的东西中使用它?
这是
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface CustomUIButton : UIButton
@property (nonatomic) IBInspectable int cornerRadius;
@end
我想要实时渲染的自定义按钮位于视图控制器
中答案 0 :(得分:4)
不幸的是,不能将IBDesignables
与静态库(或静态框架)一起使用。
这不是一个很好的答案,但我想提供一些有关原因的背景信息。
接口生成器加载类以显示为可设计的方式似乎是通过实际动态加载您创建的动态框架(而不是应用程序的二进制文件),并直接使用这些类(之后)使用Objective-C运行时更改它们。)
您可以看到Interface Builder没有加载您的应用程序,只包含具有以下步骤的各个框架:
IBDesignable
IBDesignable
类IBDesignables
目录中,您可以看到只构建了您的框架目标。接口构建器实际上使用dlopen
手动加载框架。您还可以看到,为了在构建框架时提供此功能,Interface Builder实际上会在您的二进制文件中添加2 RPATH
,因此可以在自定义路径中找到依赖关系(您可以使用otool -L frameworkbinary
查看) 。静态库无法使用这种加载二进制文件的方法。
对于它的价值,我认为最好的解决方法是构建动态框架,而不是静态库,但{em>仅用于IBDesignable
版本。你必须做一些配置工作才能做到这一点,要解决这个问题并不容易解决这个问题,但是如果你尝试它,你可以使用构建路径或环境来区分{{ 1}}构建vs“普通”构建。
答案 1 :(得分:-2)
对于与Cocoapods相关的问题,请使用以下解决方案:
有关以下是解决方案:
1)安装Cocoapods (0.36.0.beta.1)或更新版;
2)将use_frameworks!
添加到Podfile
查看更多here。