masonry更新约束

2018-09-10  本文已影响0人  爱笑的Mr张

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

上一篇下一篇

猜你喜欢

热点阅读