iOS:在tableView中通过Masonry使用autolayout在iOS7系统出现约束崩溃

Posted 程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS:在tableView中通过Masonry使用autolayout在iOS7系统出现约束崩溃相关的知识,希望对你有一定的参考价值。

一、出现崩溃情景:

给tableView创建一个头视图,也即tableHeaderView,然后使用Masonry并切换到ios7/7.1系统给tableHeaderView中的所有子视图添加约束,此时出现崩溃。

 

二、崩溃日志:

Terminating app due to uncaught exception ‘NSInternalInconsistencyException‘, reason: ‘Auto Layout still required after executing -layoutSubviews. UITableView‘s implementation of -layoutSubviews needs to call super.

 

三、崩溃原因:

据说AutoLayout是iOS6的一个bug,在iOS7上已经解决了,但实际使用还是遇到了这个问题,有可能还是没修复。

 

四、解决办法:

(1)采用setFrame方法,在layoutSubViews中给子视图计算相对位置。

(2)采用Masonry框架,不在layoutSubViews中进行,而是自定义一个方法,例如-(void)setupConstraint,然后在该方法中进行autolayout约束,在init或者initFrame中添加子视图后,调用该方法即可,也即[self setupConstraint]。

(3)采用Masonry框架,在layoutSubViews中进行,在该方法中进行autolayout约束,但是必须放在[super layoutSubViews]方法之前进行

(4)Swizzling网上比较多的说法是说给UITableView添加一个分类,在分类中覆盖+load方法,然后再load方法中使用swizzling来调整函数的执行顺序,保证执行完Autolayout后调用super -layoutSubviews。这是一个此方法的链接:关于swizzling

 

五、额外补充:

在ios7上,使用Autolayout添加子视图到UIScrollView上是没问题的。

以上是关于iOS:在tableView中通过Masonry使用autolayout在iOS7系统出现约束崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在ios中通过UITextField搜索根据搜索创建按钮

iOS知识汇使用masonry的一个坑

iOS知识汇使用masonry的一个坑

Masonry tableviewCell布局

使用masonry的一个坑

用户点击 SearchBar 时如何使 TableView 不透明