masonry更新约束
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里时)方法即可!
转载https://www.cnblogs.com/lizhishuai/p/5946944.html