执行 -layoutSubviews 后仍需要自动布局,使用UITableViewCell子类。

115
我正在使用XCode 4.5和iOS 6开发一个带有自定义单元格的简单表视图的应用程序。在iOS 5及以下版本中已经完成了一百次以上,但由于新的自动布局系统,在这里遇到了很多麻烦。
我在IB中设置了表视图和原型单元格,添加了子视图并将它们连接为IBOutlets,然后设置代理和数据源。然而,现在每当从cellForRowAtIndexPath获取第一个单元格时,我会收到以下错误:
Assertion failure in -[ShopCell layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2372/UIView.m:5776
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. ShopCell's implementation of -layoutSubviews needs to call super.'
我没有在我的子类化单元格(ShopCell)中实现-layoutSubviews方法,即使我尝试这样做并添加super调用,仍然会收到相同的错误。如果我在IB中删除单元格中的子视图,并将其更改为标准UITableViewCell,则一切正常,尽管当然我留下了没有数据的单元格。
我几乎可以确定有些简单的东西我错过了,但找不到任何文档或指南来提示我做错了什么。感谢任何帮助。

如果使用自动布局,请在调试器区域尝试lldb [[UIWindow keyWindow] _autoLayoutTrace]。 - A-Live
3
你是不是在使用UIView代替UITableViewCell作为自定义单元格?我之前也遇到了同样的问题。我一开始使用UIView作为自定义单元格,并向其中添加子视图。后来改用UITableViewCell就解决了问题。 - user1705389
取消检查检视器中的autoLayout框,然后清理并运行。它一定会起作用。 - Nico
我曾经遇到过同样的问题,为此苦苦挣扎了一段时间。user1705389的解决方案帮助了我。对我来说,这个问题出现在一个原本是单元格的表视图页脚上,我忘记将单元格的超类从UITableViewCell更改为简单的UIView。 - ShayDavidson
我在iOS 7.1中遇到了这个错误,但在iOS 8中没有。 - onmyway133
显示剩余2条评论
31个回答

-1
我曾经遇到过同样的问题,将UIView更改为UITableViewCell解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接