首先我們要弄明白這兩個(gè)方法調(diào)用的時(shí)機(jī):
layoutIfNeeded
對(duì)于已經(jīng)標(biāo)記刷新的布局,立即調(diào)用layoutSubviews進(jìn)行布局(如果沒(méi)有標(biāo)記仁讨,不會(huì)調(diào)用layoutSubviews)。
setNeedsLayout
標(biāo)記為需要重新布局咐旧,異步調(diào)用layoutIfNeeded刷新布局掂骏,不立即刷新,在下一輪runloop結(jié)束前刷新眯娱,layoutSubviews一定會(huì)被調(diào)用礁苗。
總結(jié):
setNeedsLayout一定刷新,先對(duì)需要刷新的布局進(jìn)行標(biāo)記徙缴,但是存在延遲试伙,底層其實(shí)也是調(diào)用layoutIfNeeded方法刷新。
layoutIfNeeded只有被標(biāo)記刷新于样,才會(huì)去刷新疏叨。
[self setNeedsLayout];
[self layoutIfNeeded];