【问题标题】:IBDesignable UIView Subclass Always Fails to Render in Interface BuilderIBDesignable UIView 子类总是无法在界面生成器中呈现
【发布时间】:2021-06-18 13:06:38
【问题描述】:

我看到很多关于此的问题,但答案很少(one answer 解决了之前的类似问题,但没有解决这个问题)。

问题

我有an IBDesignable class。它派生自 UIControl,但如果我从 UIView 派生,也会发生同样的事情。

基本上是这样的:

@IBDesignable
open class RVS_Checkbox: UIControl { ... }

它工作得很好(链接指向this project,这是一个“插入式”UIControl 类)。

但它不会在 Interface Builder 中呈现。我收到此错误:

这是错误,逐字逐句:

The built product "/Volumes/Development/Developer/Xcode/DerivedData/RVS_Checkbox-ficjiiqrddckmjenmsrbrxvihaky/Build/Intermediates.noindex/IBDesignables/Products/Debug-appletvsimulator/RVS_Checkbox" does not exist in the file system. Make sure your built products contains either an application or a framework product.

首先,这是一个 tvOS 错误,这是一个仅限 iOS 的类。我之前也遇到过类似的问题,this answer 为我解决了这个问题。我将代码包装在#if...#else...#endif 中,如下所示:

#if os(iOS)
    @IBDesignable
    open class RVS_Checkbox: UIControl { ... }
#else
    @IBDesignable
    class RVS_Checkbox: UIView { }
#endif

我什至给了它一个空的“占位符”,以备不时之需。

没有骰子。无论我做什么,仍然会发生 IB 错误,并且元素不会呈现。

就像我说的,它仍然可以正常工作,并且还显示了适当的可检查属性:

但它不会渲染。

这是错误,在它抱怨的目录旁边:

我确定我做错了什么,但不知道是什么。我尝试删除 DerivedData,清理项目,尝试了所有 4 个目标,等等。

没有骰子。

有什么想法吗?

【问题讨论】:

  • 开始看起来这可能是 Xcode 12 的一个问题,直到今年晚些时候我终于得到一台 M1X/M2 Mac 后才能解决。我看到的关于这个问题的大部分谈话都是这样(我还没有看到任何真正的解决方案)。没那么严重。
  • 嗯...风滚草很强大,在这个。我发送了一个 DTS 请求(我从不使用它们,为什么不呢?)。
  • 这似乎是 Xcode 的一个问题,而 Apple 并不急于解决它。它似乎与 IB 文件的复杂性有关。我无法通过简单的项目来实现它,但是一旦它开始变得复杂,我就会得到错误。可能不值得我尝试进一步调查。

标签: ios swift interface-builder ibdesignable


【解决方案1】:

好的。我想到了。这是 Xcode 中的一个错误。我提交了一份报告。

如果我在内部驱动器上打开项目,控件呈现,没问题。

如果我在外部驱动器上打开项目,则无法呈现。

很奇怪,但我能够使用一个非常简单的项目 100% 地重现它。

我怀疑大多数开发人员只是简单地获得具有大内部磁盘的 Mac,然后在这些上进行开发。我必须买一个内部驱动器有限的,所以我使用其中一个 SanDisk 尖叫器作为我开发的外部。

我想知道我可能会遇到哪些其他问题?我发现 Xcode 有很多 bug。

更新:我附上了错误报告中使用的两个屏幕截图。

这演示了设置。我在系统的两个不同位置使用相同的项目。左边的一个在内部 MacBook Pro 驱动器上,右边的一个是 THE SAME EXACT PROJECT,但在外部驱动器上。

This link downloads the project, in a zip file.

【讨论】:

  • 感谢您的跟进,不幸的是,这不是我的问题。我面临着完全相同的问题,除了我的一直在本地/内部磁盘上。我的课程包含在 #if os(iOS) 检查中,但仍然在 IB 中收到 tvOS 错误。
  • 我认为这整件事就是一个错误农场。不幸的是,我认为苹果对解决这个问题并不特别感兴趣。他们正在全力以赴 SwiftUI(这还没有为一些更雄心勃勃的项目做好准备)。
  • 这仍然不适用于 SPM,在您的示例项目中,您有 2 个目标 - 直接和 spm,但是当您删除“直接”源代码时,“spm”不会呈现可设计对象
  • 并不惊讶。我听说 SPM 不能很好地处理 designables。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 2012-05-21
相关资源
最近更新 更多