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