Masonry 使用总结(示例)
来源:互联网 发布:网络主播面试什么条件 编辑:程序博客网 时间:2024/06/05 22:41
- 尺寸
- 边距
- 相对位置
- 居中
- 其他用法
- 更新约束
- 重置约束
- 设置优先级
- UILabelUIImageView 约束的特殊性
- equalTo 和 mas_equalTo的区别
- 部分常见崩溃报错
尺寸
1、设置宽、高 make.width.mas_equalTo(120);
make.height.mas_equalTo(80);
2、同时设置宽高为某常量 make.width.height.mas_equalTo(100);
3、设置宽度是某个view的乘数 make.width.equalTo(sv1).multipliedBy(0.8);
make.width.equalTo(superView.mas_width).multipliedBy(0.2);
4、将size设置成(300,300) make.size.mas_equalTo(CGSizeMake(300, 300));
4、控件的宽和高小于或者等于self.view的宽和高,因此这个控件的最多能放大到全屏幕。 make.width.height.lessThanOrEqualTo(self.view);
12、固定尺寸:
正确: make.size.mas_equalTo(CGSizeMake(22, 22));
错误:make.size.equalTo(CGSizeMake(22, 22));
14、让控件的宽和高相等且设置其优先级最低。
make.width.height.mas_equalTo(100 * self.scacle).priorityLow();
边距
6、当我们是要与父控件相对约束时,可以省略掉父视图。
简写 make.right.mas_equalTo(-padding);
完整写法为: make.right.mas_equalTo(bludView.superView.mas_right).offset(-padding);
注意,并不是什么时候都可以省略,只有约束是同样的才可以省略。比如,约束都是right才可以。如果是一个left一个是right,那么就不能省略了。
7、与父控件有边距 make.edges.equalTo(superview).with.insets(padding);
10、让一个view略小于其superView(边距为10)
UIView *sv1 = [UIView new];[sv1 showPlaceHolder];sv1.backgroundColor = [UIColor redColor];[sv addSubview:sv1];[sv1 mas_makeConstraints:^(MASConstraintMaker *make) {make.edges.equalTo(sv).with.insets(UIEdgeInsetsMake(10, 10, 10, 10));
等价于
make.top.equalTo(sv).with.offset(10); make.left.equalTo(sv).with.offset(10); make.bottom.equalTo(sv).with.offset(-10); make.right.equalTo(sv).with.offset(-10);
也等价于
make.top.left.bottom.and.right.equalTo(sv).with.insets(UIEdgeInsetsMake(10, 10, 10, 10));
相对位置
1、sv2 紧跟在 sv1下面
正确: make.top.equalTo(self.label0.mas_bottom);
错误: make.top.equalTo(self.label0.bottom);
make.top.equalTo(self.label0.top);
居中
居中于父控件 make.center.equalTo(pView);
其他用法
1、顶部、高度和底部都与greenView的顶部、高度和底部相等 make.top.height.bottom.mas_equalTo(greenView);
更新约束
- (void)updateLayout{ //更新约束:覆盖原有的约束;可以设置多个 //更新redView的约束高度变为80 [self.redView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(80); make.trailing.equalTo(self.view).with.offset(-30); }];}
重置约束
- (void)remakeLayout{ //重新设置,会把之前的约束给清空掉,然后使用新的约束,必须设全四个约束 [self.redView mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.left.offset(20); make.right.offset(-20); make.height.mas_equalTo(80); }];}
设置优先级
UILabel、UIImageView 约束的特殊性
总结:
1. UILabel、UIImageView 可以不设置宽高;
2. 不设置宽高时,根据文字、图片内容自动包裹;
3. 当文字内容、图片尺寸改变时,宽度自动改变;
4. 当label设置了对trailing的边距,同时左边有view与它有相对距离时;label变宽,这个view也会向左移动,不需要更新约束。
[self.label mas_makeConstraints:^(MASConstraintMaker *make) { make.trailing.equalTo(self.view); make.top.equalTo(self.view).with.offset(30); }]; self.label.text = @"123";
2、多行的UILabel不设置宽高时,preferredMaxLayoutWidth用来制定最大的宽;设置宽度后,preferredMaxLayoutWidth无效。
self.label.preferredMaxLayoutWidth = 250;
equalTo 和 mas_equalTo的区别
mas_equalTo是一个MACRO,后面接常量:CGPoint CGSize UIEdgeInsets,和NSNumber支持的那些数值类型
make.height.mas_equalTo(@150);
make.width.equalTo(sv2);
部分常见崩溃报错
1、 self是控制器 make.trailing.equalTo(self);
这样的写法报错时,可能self是一个控制器,而不是view,改成下面写法试试:
make.trailing.equalTo(self.view);
2、参考view为空
make.trailing.equalTo(bgView);
bgView没有初始化,为nil的时候,会崩溃;
mas_makeConstraints 只负责新增约束 Autolayout;一个make方法不能同时存在两条针对于同一对象的约束,否则会报错。
参考文章
- Masonry 使用总结(示例)
- Masonry使用总结
- Masonry 使用复习总结
- Masonry使用总结
- Masonry使用总结
- Masonry使用总结
- AutoLayout使用总结のMasonry
- AutoLayout使用总结のMasonry
- Masonry框架使用示例(转载)
- ios开发autolayout之Masonry使用总结
- 使用Masonry
- Masonry使用
- Masonry使用
- Masonry使用
- Masonry使用
- Masonry使用
- Autolayout示例2-Masonry实现
- Quartz使用示例总结
- php综合web开发(6)
- Spring Cache+Redis实现自定义注解缓存
- C#串口关闭Close()-线程卡死-解决方法
- textview 文字倒影
- Glide与Picasso简单集成并使用
- Masonry 使用总结(示例)
- 算法导论 2.1-4
- dojo中的this.own()
- ACM:组合数末尾的零
- 挑战程序竞赛系列(3):2.3需要思考的动规
- 文件IO编程三
- H5 单选控件 radio入门
- ViewPager切换Fragment生命周期变化
- 查看端口占用进程