问题描述
不废话,由于历史原因,你有一个禁用了Autolayout的UITableView,你现在在上面添加了一个开启了Autolayout的subView,你在iOS8以后的系统中愉快的运行,正在感叹Autolayout的强大好用,然后又由于历史原因,你们的App还在支持iOS7,那在iOS7系统上你会得到一个毕现的crash,你会在控制台收到下面这样的Log:
2016-07-10 13:26:56.250 CrashTest[15164:60b] *** Assertion failure in -[UITableView layoutSublayersOfLayer:], /SourceCache/UIKit/UIKit-2935.138/UIView.m:8794
2016-07-10 13:40:43.634 CrashTest[15164:60b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UITableView's implementation of -layoutSubviews needs to call super.'
*** First throw call stack:
(0x182467100 0x18e9701fc 0x182466fc0 0x182f9edb4 0x18542b0a8 0x18501c258 0x185016e20 0x1850499e4 0x1854b0a90 0x1854af9ec 0x18543243c 0x1854af018 0x185437948 0x185434d60 0x1854a7824 0x1854a4130 0x18549d9d4 0x1854318b4 0x185430ab8 0x18549d02c 0x18804f504 0x18804f030 0x182427040 0x182426fa0 0x1824251c4 0x182365dd0 0x18549c1b0 0x185496fc4 0x10003c828 0x18ef63aa0)
libc++abi.dylib: terminating with uncaught exception of type NSException
如果你添加了全局异常断点,你会收到这样让人懵逼的断点信息
解决方案
如果你的tableView没有使用auto layout,那么添加在它上面的subView,老老实实的用autoresizing吧,等到你脱离iOS7,就可以愉快的使用autolayout了,呵呵!
当然,如果哪位同学还有其他完美的解决方案,不妨在留言里优雅的点出,不胜感激