【问题标题】:Static library, bundle and IB Designable静态库、捆绑包和 IB Designable
【发布时间】:2015-01-27 00:46:06
【问题描述】:

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

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

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

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

这是

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface CustomUIButton : UIButton

@property (nonatomic) IBInspectable int cornerRadius;

@end

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

【问题讨论】:

    标签: ios storyboard bundle ibdesignable ibinspectable


    【解决方案1】:

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

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

    这与this question有关。

    解决办法如下:

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

    2) 将use_frameworks! 添加到您的Podfile

    查看更多here

    【讨论】:

    • 他没有说明他正在使用 CocoaPods。此问题似乎会影响驻留在静态库中并用于来自另一个项目的故事板或 xib 的 IB_DESIGNABLES。 use_frameworks!指令似乎告诉 CocoaPods 导入框架而不是静态库。
    【解决方案2】:

    很遗憾,不能将IBDesignables 与静态库(或静态框架)一起使用。

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

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

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

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

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

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

    【讨论】:

    • 如何为“正常”和IBDesignable 构建分别配置?我想使用IBDesignable UI 元素,但我无法切换到动态库。
    • 您可以通过覆盖未记录的LD 构建设置来完成此操作,该设置替换默认的 ld 可执行文件,并根据构建目录更改设置,其中仅包括这些构建的 IBDesginables。有关使用此构建设置并解析传递给 ld 的参数的示例,请参阅 github.com/keith/swift-staticlibs
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多