在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,它工作正常。 但在这种情况下,定向处理并不好。请帮忙。
答案 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代码,这将需要更长的时间来测试和更新。