ios开发中masonry的使用心得

去年作项目时用到一个第三方自动布局的框架——Masonry,期间碰到过一些问题,如今在此总结一下:ios

1.添加约束后APP崩溃的问题:(全部问题缘由都能归根结底到子view没有成功加到父view上就设置约束)网络

①若是是ios7及ios7如下的系统,崩溃的大部分以前在网络上查过,主要元缘由说“主要是在equalTo的对象指到了父视图的父视图或者父视图同级的子视图上形成的”,后来将约束equalto全都指向了父view或者同级别的view上,以后的确奏效;框架

②若是是ios7以上的系统,系统崩溃的可能缘由:a)尚未将子view添加到父view上就开始添加约束,这样view彻底找不到本身的约束根基在哪里,必然会崩;b)以前遇到过一个设置navigationbar的leftbuttonitem和rightbuttonitem,可是我在viewdidload()方法直接设置约束就会引起崩溃,缘由多是在跳转该界面时(页面push进来时)navigationbar尚未加载完,此时就开始添加buttonitem并设置约束,因此解决方案是延时设置navigationbar的样式:布局

 

dispatch_after(time, dispatch_get_main_queue(), ^{动画

        [XXX];spa

 });对象

2.添加约束不起做用的问题:get

①设置的约束不能肯定控件的惟一位置,除非有须要自适应高度的控件,须要其余地方从新控制高度;页面布局

②取消掉全部控件的use autolayout 和autoresize subviews属性,由于这是系统自带的autolayout因此须要去掉才能发挥masonry的用处;it

3)在一些跳转的界面,有的控件尚未加载完就设置约束确定不会起做用的,例如以前我用MJRefresh进行下拉上拉刷新时,页面刚跳转进来时tableview尚未加载完就设置了header,此时header的约束确定不能成功,因此解决方案也是采用延时处理;

最后放一下从网络上摘取的几个刷新布局的方法,给本身mark一下:

 

  • setNeedsLayout:告知页面须要更新,可是不会马上开始更新。执行后会马上调用layoutSubviews。
  • layoutIfNeeded:告知页面布局马上更新。因此通常都会和setNeedsLayout一块儿使用。若是但愿马上生成新的frame须要调用此方法,利用这点通常布局动画能够在更新布局后直接使用这个方法让动画生效。
  • layoutSubviews:系统重写布局
  • setNeedsUpdateConstraints:告知须要更新约束,可是不会马上开始
  • updateConstraintsIfNeeded:告知马上更新约束
  • updateConstraints:系统更新约束

这只是目前刚用masonry不久的一点当心得,若是不对,请各位大神指正啊(*^__^*) 

相关文章
相关标签/搜索