故事板 UITableViewCell 的 IB Designables:无法呈现和更新 CountdownViewController 的自动布局状态代理崩溃

IB Designables for storyboard UITableViewCell: Failed to render and update auto layout status for CountdownViewController The agent crashed

我好像用错了@IBDesignbale,为什么?

我想结合使用 IBDesignableprepareForInterfaceBuilder 将一些数据注入我的 MyTableViewCell 以便它可以显示一些虚拟数据(在此示例项目中,只需设置dummyView.backgroundColor = .red ) 在我的故事板中。

我当前的设置:

1,我猜是使用故事板的 tableview 的通常设置。 TableView inside a view 并将 UITableViewCell 拖入 tableview。

2,标记我的MyTableViewCell@IBDesignable

3、覆盖 MyTableViewCell 内的 prepareForInterfaceBuilder 设置 dummyView backgroundColor

错误:

Main.storyboard:错误:IB Designables:无法呈现和更新 ViewController 的自动布局状态(BYZ-38-t0r):代理崩溃了

发生这种情况是因为您的 dummyView 是一个 IBOutlet 并且被隐式解包了。 prepareForInterfaceBuilder 将在 dummyView 初始化之前被调用。您可以通过将代码更改为 dummyView?.backgroundColor = .red 来防止崩溃,但是由于 dummyView == nil,因此不会呈现任何内容。

IBDesignableIBOutlet 混合使用没有多大意义。一般来说,IBDesignable是为了让运行时间布局和绘图在设计时可见。但是 IBOutlets 在设计时必然已经可见。然而,这在 xib 中可能是可取的。有关讨论,请参阅 here and here.