Masonry框架源码分析
Posted 码农的奋斗日记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Masonry框架源码分析相关的知识,希望对你有一定的参考价值。
相信大多数ios开发者对Masonry框架并不陌生 , 本文是笔者通读Masonry的代码之后的一篇总结, 也希望可以帮助大家更好的理解该框架. 怎奈笔者才疏学浅, 如有遗漏或错误也欢迎大家评论区指出, 大家一起进步!
iOS布局的演进
在说Masonry, 先简单介绍一下iOS开发屏幕适配的发展过程. 在iPhone3Gs/4/4s时代, 手机屏幕尺寸都是一样的, 对于开发者来说基本不用适配,彼时的屏幕布局基本都是采用frame, 但是随着iPad的出现, frame布局便不能满足需求, 苹果开始推出AutoResizing布局, 这种布局核心内容就是: 以父容器为参照物来对子空间进行frame布局, frame不再是直接写死的值, 而是可以根据父视图的大小变化, 但是这种布局方式的缺点也很明显, 就是不能设置兄弟视图之间的关系, 所有苹果煞费苦心的推出了AutoLayout, AutoLayout的出现基本弥补了AutoResizeing不足, iOS开发的屏幕适配变得更加轻松.
苹果原生AutoLayout布局与Masonry比较
虽然苹果的初衷很好, 但是无奈苹果的NSLayoutConstraint布局实在是太过于臃肿了, 所以在github开始涌现出各种各样的三方布局框架, 其中就有今天的主角Masonry. 笔者截取了部分布局代码大家感受一下
UIView *blueView = [[UIView alloc]init];
blueView.backgroundColor = [UIColor blueColor];
[self.view addSubview:blueView];
///原生自动布局方式
//去掉aotoReszing
blueView.translatesAutoresizingMaskIntoConstraints = NO;
NSLayoutConstraint *top = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:0];
NSLayoutConstraint *left= [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0];
NSLayoutConstraint *right = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant: 0];
NSLayoutConstraint *bottom = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant:0];
[self.view addConstraint:top];
[self.view addConstraint:left];
[self.view addConstraint:right];
[self.view addConstraint:bottom];
以上是关于Masonry框架源码分析的主要内容,如果未能解决你的问题,请参考以下文章