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 的中心为中心”? [关闭]