CustomTableCellView的-layoutSubviews实现需要调用super,NSInternalInconsistencyException

时间:2012-11-29 14:02:15

标签: iphone ios uitableview ios6

在tableView xib的自定义单元格中使用autoLayout时,我收到以下错误。

在iOS 6模拟器中运行 CustomCells的-layoutSubviews实现需要调用super

Assertion failure in 

-[CustomCells layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2372/UIView
     *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. CustomCells's implementation of -layoutSubviews needs to call super.'
    *** First throw call stack:

在iOS 5模拟器中运行

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'The NIB data is invalid.'
*** First throw call stack:

临时修复:

如果在自定义单元格中禁用autoLayout,它工作正常。 但在这种情况下,定向处理并不好。请帮忙。

2 个答案:

答案 0 :(得分:5)

layoutSubviews needs to call super

可以通过将自定义tableview单元格中的所有内容放在容器视图中来解决iOS6问题。即创建一个新视图来填充单元格,然后在其中放置控件等。还要确保设置:

[theContainerView setTranslatesAutoresizingMaskIntoConstraints:NO]; 

表示容器和子视图

答案 1 :(得分:1)

iOS 5.1及更早版本与AutoLayout不兼容。它仅适用于iOS 6.0 +。

假设您正在使用故事板,如果您想使用AutoLayout但仍然保持与6.0之前的iOS版本的兼容性,则需要创建两个目标:一个用于iOS 6,另一个用于iOS 5(或更早版本)。对于每个,设置一个单独的故事板,一个启用AutoLayout(适用于iOS 6),另一个不支持(适用于iOS 5)。

这是一个StackOverflow线程,用于AutoLayout的最佳实践以及与iOS 5的向后兼容性:Enabling auto layout in iOS 6 while remaining backwards compatible with iOS 5

根据我的经验,如果你想要向后兼容,那么使用AutoLayout是不值得的。如果你正在使用故事板,那么要让2个目标和2个故事板同步是一个令人头疼的问题。如果您不使用故事板,则需要单独的iOS 5和iOS 6代码,这将需要更长的时间来测试和更新。