IBDesignable 视图导致无休止的重建

IBDesignable view causes endless rebuilding

我正在编写一个同时使用 IBInspectable 和 IBDesignable 的 UIView subclass。我没有做任何不寻常的事情,但我的 subclass 导致 Xcode 6.2 无休止地重建项目。我的 Identity Inspector 在标题 'Designables':

下显示了这种状态振荡

每次重新启动构建时,检查器都会失去焦点。这使得很难从 IB 编辑任何内容,这首先违背了编写此 class 的目的。

这是我的 DesignableTestView 的实现:

import UIKit
@IBDesignable class DesignableTestView: UIView {

    @IBInspectable var testBackground:UIColor? {
        didSet {
            if testBackground != nil {
                self.backgroundColor = testBackground
            }
        }
    }
}

有什么方法可以更改我的代码或 Xcode 的设置以防止不断重建?

我想知道这个可设计的视图 class 是否是当前目标的一部分。在 WWDC 2014 视频 What's New in Interface Builder 中,在实时视图演示中,他们描述了第一步是确保可设计 class 在单独的自定义框架目标中。该视频演示了在项目中创建此自定义框架目标的过程。

如果这不是问题。我建议清理您的项目(“产品”菜单上的“清理”)并仅重建自定义框架目标以确保在您尝试在 IB 本身中执行任何操作之前一切正常。最重要的是,确保可以顺利构建框架。如果这样做之后问题仍然存在,我会把它带到下一个级别并(a)找到 Xcode 派生数据文件夹; (b) 退出 Xcode; (c) 清除派生数据文件夹,(d) 重新启动 Xcode,以及 (e) 再次尝试构建框架目标。

编辑:
link以上好像死了。视频可直接下载:http://devstreaming.apple.com/videos/wwdc/2014/411xx0xo98zzoor/411/411_hd_whats_new_in_interface_builder.mov?dl=1

还有一个 github 要点 links to all the 2014 material: https://gist.github.com/jianpx/eea1e938d5868e980b11

即使在将我的 IBDesignable 类 移至单独的框架后,我仍然遇到这个问题(在 Xcode 8.3.3 中)。对我有用的是打开有问题的 Xib 文件,取消选中 Editor > Automatically Refresh Views,然后重新启动 Xcode.

即使在将所有 IBDesignables 和 IBInspectables 移动到一个单独的框架(并清理所有,杀死派生数据)之后,我仍然有这个问题 Xcode 9.3。 IB 将继续重建主要目标及其依赖项。

我在这里找到的解决方案https://www.e-learn.cn/content/wangluowenzhang/307740解决了:

  1. 删除所有 @IBDesignable@IBInspectable
  2. 清除所有,清除派生数据,关闭Xcode
  3. 重新打开 Xcode,强制 IB 在没有 IBDesignables 的情况下重建(编辑器 -> RefreshAllViews 应该不会变灰)
  4. 关闭Xcode
  5. 将所有 @IBDesignable@IBInspectable 添加回
  6. 重新打开Xcode
  7. RefreshAllViews 应该可用,点击它。
  8. 瞧,IB 从现在开始不再只重建框架

显然 Xcode 中缓存了一些时髦的东西,cleanall/killing 派生数据没有擦除。