去年作項目時用到一個第三方自動佈局的框架——Masonry,期間碰到過一些問題,如今在此總結一下:ios
1.添加約束後APP崩潰的問題:(全部問題緣由都能歸根結底到子view沒有成功加到父view上就設置約束)網絡
①若是是ios7及ios7如下的系統,崩潰的大部分以前在網絡上查過,主要元緣由說「主要是在equalTo的對象指到了父視圖的父視圖或者父視圖同級的子視圖上形成的」,後來將約束equalto全都指向了父view或者同級別的view上,以後的確奏效;框架
②若是是ios7以上的系統,系統崩潰的可能緣由:a)尚未將子view添加到父view上就開始添加約束,這樣view徹底找不到本身的約束根基在哪裏,必然會崩;b)以前遇到過一個設置navigationbar的leftbuttonitem和rightbuttonitem,可是我在viewdidload()方法直接設置約束就會引起崩潰,緣由多是在跳轉該界面時(頁面push進來時)navigationbar尚未加載完,此時就開始添加buttonitem並設置約束,因此解決方案是延時設置navigationbar的樣式:佈局
dispatch_after(time, dispatch_get_main_queue(), ^{動畫
[XXX];spa
});對象
2.添加約束不起做用的問題:get
①設置的約束不能肯定控件的惟一位置,除非有須要自適應高度的控件,須要其餘地方從新控制高度;頁面佈局
②取消掉全部控件的use autolayout 和autoresize subviews屬性,由於這是系統自帶的autolayout因此須要去掉才能發揮masonry的用處;it
3)在一些跳轉的界面,有的控件尚未加載完就設置約束確定不會起做用的,例如以前我用MJRefresh進行下拉上拉刷新時,頁面剛跳轉進來時tableview尚未加載完就設置了header,此時header的約束確定不能成功,因此解決方案也是採用延時處理;
最後放一下從網絡上摘取的幾個刷新佈局的方法,給本身mark一下:
這只是目前剛用masonry不久的一點當心得,若是不對,請各位大神指正啊(*^__^*)