Interface Builder 中的 AutoLayout 和 UITableViewCell 原型

Posted

技术标签:

【中文标题】Interface Builder 中的 AutoLayout 和 UITableViewCell 原型【英文标题】:AutoLayout and UITableViewCell prototypes in Interface Builder 【发布时间】:2013-01-29 15:59:16 【问题描述】:

我有一个 UITableViewCell 子类,打开自动布局后,我现在收到此错误:

2013-01-29 15:46:15.555 iP2[6690:907] *** Assertion failure in -[MenuTableViewCell layoutSublayersOfLayer:], /SourceCache/UIKit/UIKit-2372/UIView.m:5776
2013-01-29 15:46:30.357 iP2[6690:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. MenuTableViewCell's implementation of -layoutSubviews needs to call super.'

MenuTableViewCell 是我的子类。

我猜这与 IB 如何决定自动构建此单元格的约束有关。这是我为此单元设置 IB 的屏幕截图:https://www.evernote.com/shard/s4/sh/0ec12042-7d37-4770-8d7a-c0c8c1e4e6f0/3192e32e8fde55dfe94c7269c428f73b

【问题讨论】:

你在子类中覆盖 layoutSubviews 吗? 没有。所以我假设 UITableViewCell 是,这可能不是调用 super. 当你调用 addSubview 调用 layoutSubviews [tableCell addSubview:viewFromXib]; [tableCell layoutSubviews]; 【参考方案1】:

关闭自动布局为我解决了这个问题,似乎UITableViewCell 不支持自动布局,因此您可以将其子类化并在您的设计中使用自动布局...

【讨论】:

你有什么证据表明 UITableViewCell 不支持自动布局? 据我记忆,我将 UITableViewCell 子类化,即使我没有覆盖 layoutSubviews,也会导致 OP 崩溃。【参考方案2】:

可能是你必须实现 layoutSubviews 方法吗?而且您似乎也将此消息发送给了超级。例如:

(void)layoutSubviews [超级布局子视图]; ETC...

【讨论】:

我包括了 -(void)layoutSubviews [super layoutSubviews];以防万一是这样的疯狂;但它仍然会引发错误。我有一种感觉,UITableViewCell 可能不会在 IT 的 layoutSubViews 方法中调用 super。

以上是关于Interface Builder 中的 AutoLayout 和 UITableViewCell 原型的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在Interface Builder中为Auto Layout Constraints添加标识符?

转 iOS 8 Auto Layout界面自动布局系列2-使用Xcode的Interface Builder添加布局约束

是否可以在 Interface Builder 和 Auto Layout 中说“使这个 UILabel 以另一个 UILabel 的中心为中心”? [关闭]

Interface Builder 中的圆角标签...? [复制]

iOS Interface Builder 中的架构方法

了解 Interface Builder 中的 Outlets