iphone屏幕大小越來越多樣化,使用frame來布局已經是強弩之末,好多同行前輩已經把autolayout研究的滾瓜爛熟了,但是蘋果的autolayout過于繁瑣,懶得去研究,有一個非常好用而且功能非常強大的第三方自動化布局框架masonry,簡書等各個論壇或者網站教程一大堆而且講的都比較詳細,多以直接站在巨人的肩膀上研究自動布局,真的是事半功倍,
以前做動畫很多時候需要用到frame,那么使用masonry之后你會發現取得的frame都為0,瞬間懵逼,這怎么搞,網上關于masonry的教程很多,但是對于這個問題相對來說比較少,在網上看了幾篇文章,對這個問題有所了解,那么怎么解決呢,先看一下這幾個方法!
setNeedsLayout
setNeedsLayout:告知頁面需要更新,但是不會立即開始更新.執行后立即調用layoutsubviews;
layoutIfNeeded
layoutIfNeeded:告知頁面需要立即更新,所以一般會和setNeededLayout配合使用.如果希望立即生成新的frame需要調用此方法,利用這點一般布局動畫可以使用這個方法是動畫生效.
layoutsubviews
layoutsubviews:系統重寫布局
setNeedsUpdateConstraints
setNeedsUpdateConstraints:告知需要更新約束,但是不會立刻開始
updateConstraintsIfNeeded
updateConstraintsIfNeeded:告知立刻更新約束
updateConstraints
updateConstraints:系統更新約束
那么了解完第一第二個方法之后我們的問題就很順利的解決了,當使用autolayout布局時如果需要取得某個控件的frame,我們只需要用該控件的對象調用setNeedsLayout和layoutIfNeeded方法然后實現layoutsubviews或者viewDidLayoutSubviews(當控件直接寫在controller里時)方法即可!