自己总结的一些关于Masonry适配姿势
2016-12-14 本文已影响762人
小二同學
之前做Masonry适配,适配精确度不高,而且代码可读性比较差,一堆固定的数字,看起来非常扎眼,我觉得适配应该尽可能少出现数字,特别是比较大的间距,要尽量做到自适应。自己这几天翻看了Masonry源码,总结了一些,自己之前很少用到的姿势,来分享一下。
如果各个控件里面的间距都一样的话,可以定义一个padding,这样在Masonry适配的时候就直接拿这个padding去标记间距,要做到复用。
int padding = 10;
然后,Masonry里面这样用
make.left.greaterThanOrEqualTo(@(padding));
make.bottom.equalTo(blueView.top).offset(-padding);
三个控件等宽
make.height.equalTo(@[greenView.mas_height, redView.mas_height]);
整体居中
make.center.equalTo(self);
如果有动画效果,可以拉伸的话,用这个。不会超出父视图范围。
make.width.lessThanOrEqualTo(self);
make.height.lessThanOrEqualTo(self);
设置中心点坐标和大小
make.center.equalTo(CGPointMake(0, 50));
make.size.equalTo(CGSizeMake(200, 100));
For循环里面使用Masonry
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;
}
上下左右都和某一控件比的话,还可以这样写
make.left.right.and.top.equalTo(self);
宽是高的三倍
make.width.equalTo(self.topInnerView.mas_height).multipliedBy(3);
适配出现问题
Masonry Log.png控制台会打印这些东西,仔细检查你的约束。
Label文字自适应高度
UILabel *lab1 = [[UILabel alloc]initWithFrame:CGRectZero];
lab1.text = @"zfkjfjfj爱很简单发生标点符号必定会被对方不开始覅还会发黑丝回复isif";
lab1.textColor = [UIColor greenColor];
lab1.backgroundColor = [UIColor blackColor];
lab1.preferredMaxLayoutWidth = (self.view.frame.size.width-2*padding);
[lab1 setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
lab1.numberOfLines = 0;
[self.view addSubview:lab1];
UILabel *lab2 = [[UILabel alloc]initWithFrame:CGRectZero];
lab2.text = @"zfkjfjfj爱很简单发生标点符号必定会被对方不开始覅还会发黑打火机是发生的粉红色的符合规划是高科技和丝回复isif";
lab2.textColor = [UIColor blueColor];
lab2.preferredMaxLayoutWidth = (self.view.frame.size.width-2*padding);
[lab2 setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
lab2.numberOfLines = 0;
[self.view addSubview:lab2];
[lab1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.greaterThanOrEqualTo(@(padding));
make.right.equalTo(self.view.mas_right).offset(-padding);
make.top.equalTo(self.view.mas_top).offset(100);
}];
[lab2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view.mas_left).offset(padding);
make.right.equalTo(self.view.mas_right).offset(-padding);
make.top.equalTo(lab1.mas_bottom).offset(20);
}];
x轴居中
make.centerX.equalTo(self);