研究了下
Masonry
的代码,发现这个库写的非常巧妙,其很好的通过Block
封装了一个链式调用系统。
我这里写了一个类似于Masonry
的库,CXLayout
,详见GitHub,喜欢的朋友可以看一看。
使用方法
Step 1:添加控件
#import "CXLayout.h"
UIView *greenView = UIView.new;
greenView.backgroundColor = [UIColor greenColor];
[self.view addSubview:greenView];
Step 2:添加约束
[greenView CX_AutoLayout:^(CXLayoutManager *mgr) {
mgr.Equal_width(nil,CX_Default,200).height(CX__Default,44).center(CGPointMake(0, - ScreenHeight/2 + 80));
}];
Step 3:更新约束
[greenView CX_AutoLayoutUpdate:^(CXLayoutManager *mgr) {
mgr.equal.size(CGSizeMake(150, 150));
}];
添加约束的时候,mgr后面跟的约束代码无需顺序,你也可以写成:
mgr.equal.width(nil,1,200).height(nil,1,44).center(CGPointMake(0, - ScreenHeight/2 + 80));
或者分成多行写成:
mgr.equal.width(nil,1,200);
mgr.equal.height(nil,1,44);
mgr.equal.center(CGPointMake(0, - ScreenHeight/2 + 80));
其实这个库只是仿Masonry
的一个简单实现,想研究Masonry
源码的可以看看。