1、出現崩潰情景:ios
給tableView建立一個頭視圖,也即tableHeaderView,而後使用Masonry並切換到iOS7/7.1系統給tableHeaderView中的全部子視圖添加約束,此時出現崩潰。git
2、崩潰日誌:github
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UITableView's implementation of -layoutSubviews needs to call super.app
3、崩潰緣由:框架
聽說AutoLayout是iOS6的一個bug,在iOS7上已經解決了,但實際使用仍是遇到了這個問題,有可能仍是沒修復。函數
4、解決辦法:ui
(1)採用setFrame方法,在layoutSubViews中給子視圖計算相對位置。spa
(2)採用Masonry框架,不在layoutSubViews中進行,而是自定義一個方法,例如-(void)setupConstraint,而後在該方法中進行autolayout約束,在init或者initFrame中添加子視圖後,調用該方法便可,也即[self setupConstraint]。日誌
(3)採用Masonry框架,在layoutSubViews中進行,在該方法中進行autolayout約束,可是必須放在[super layoutSubViews]方法以前進行blog
(4)Swizzling。網上比較多的說法是說給UITableView添加一個分類,在分類中覆蓋+load方法,而後再load方法中使用swizzling來調整函數的執行順序,保證執行完Autolayout後調用super -layoutSubviews。這是一個此方法的連接:關於swizzling。
5、額外補充:
在ios7上,使用Autolayout添加子視圖到UIScrollView上是沒問題的。