先看结果:
再看代码:
- (id)init {
self = [super init];
if (!self) return nil;
UIView *lastView = self;
for (int i = 0; i < 10; i++) {
UIView *view = UIView.new;
view.backgroundColor = [self randomColor];
view.layer.borderColor = UIColor.blackColor.CGColor;
view.layer.borderWidth = 2;
[self addSubview:view];
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(lastView).insets(UIEdgeInsetsMake(5, 10, 15, 20));
}];
lastView = view;
}
return self;
}
- (UIColor *)randomColor {
CGFloat hue = ( arc4random() % 256 / 256.0 ); // 0.0 to 1.0
CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from white
CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from black
return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
}
至于循环10次来添加约束这个逻辑很容易理解,我关注的是edges这个复合数据结构。可以想象一下,我就布局一个简单的视图在父视图上,要确定其上下左右,可以使用基本布局中的方式:
make.top.equalTo(superview.top).offset(10);
make.left.equalTo(superview.left).offset(10);
make.bottom.equalTo(superview.bottom).offset(-10);
make.right.equalTo(superview.right).offset(-10);
也可以使用常量:
make.top.equalTo(@10);
make.left.equalTo(@10);
make.bottom.equalTo(@-10);
make.right.equalTo(@-10);
也可以使用edges:
make.edges.equalTo(superview).insets(UIEdgeInsetsMake(10, 10, 10, 10));
你想用哪个?