mas_makeConstraints && mas_remakeConstraints && mas_updateConstraints 用法与注意事项
2016-07-09 23:16
330 查看
1 mas_makeConstraints 只负责新增约束,Autolayout 不能同时存在两条针对于同一对象约束 否则会报错
注意:在添加约束之前一定要添加到view( [testView addSubview:self.view])上 否则会报错
[testView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(view1.mas_trailing).offset(10);
make.bottom.equalTo(view2.mas_bottom).offset(-2);
make.height.mas_equalTo(70);
make.width.mas_equalTo(50);
}];
2 mas_remakeConstraints 会清除之前的所有约束 仅保留最新的约束
如下:会清除原来的以view1 和view2 为参照的约束 保留 以view3 和view4 为参照的约束
[testView mas_remakeConstraints :^(MASConstraintMaker *make) {
make.bottom.equalTo(view3.mas_top).offset(-10);
make.centerX.equalTo(view4.mas_centerX);
make.height.mas_equalTo(70);
make.width.mas_equalTo(50);
}];
3 mas_updateConstraints 针对上面的情况 会更新block中出现的约束 不会导致出现两个相同的约束的情况
注意: 同一个对象 使用mas_updateConstraints 一定要保证 block中要更新的元素是 其使用mas_makeConstraints 设置的约束
如下就是正确的 则不会出现约束冲突问题
[testView mas_updateConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(view1.mas_top).offset(-60);
必须是 同一参照对象(都是以view1)同一参照属性(都是以view1的mas_top)
}];
但是下面的就不对了 就会出现约束冲突 在iOS 7 及其以下会出现由于约束冲突出现的崩溃
[testView mas_updateConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(view2.mas_top).offset(-10);
make.centerX.equalTo(view4.mas_centerX);
原因1:不同一参照对象 (原来是view1 现在是view2)
原因2 testView 在 mas_makeConstraints中没有设置 center 所以无法更新
}];
解决办法:使用mas_remakeConstraints 清除原来的约束 重新设置约束;
}];
注意:在添加约束之前一定要添加到view( [testView addSubview:self.view])上 否则会报错
[testView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(view1.mas_trailing).offset(10);
make.bottom.equalTo(view2.mas_bottom).offset(-2);
make.height.mas_equalTo(70);
make.width.mas_equalTo(50);
}];
2 mas_remakeConstraints 会清除之前的所有约束 仅保留最新的约束
如下:会清除原来的以view1 和view2 为参照的约束 保留 以view3 和view4 为参照的约束
[testView mas_remakeConstraints :^(MASConstraintMaker *make) {
make.bottom.equalTo(view3.mas_top).offset(-10);
make.centerX.equalTo(view4.mas_centerX);
make.height.mas_equalTo(70);
make.width.mas_equalTo(50);
}];
3 mas_updateConstraints 针对上面的情况 会更新block中出现的约束 不会导致出现两个相同的约束的情况
注意: 同一个对象 使用mas_updateConstraints 一定要保证 block中要更新的元素是 其使用mas_makeConstraints 设置的约束
如下就是正确的 则不会出现约束冲突问题
[testView mas_updateConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(view1.mas_top).offset(-60);
必须是 同一参照对象(都是以view1)同一参照属性(都是以view1的mas_top)
}];
但是下面的就不对了 就会出现约束冲突 在iOS 7 及其以下会出现由于约束冲突出现的崩溃
[testView mas_updateConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(view2.mas_top).offset(-10);
make.centerX.equalTo(view4.mas_centerX);
原因1:不同一参照对象 (原来是view1 现在是view2)
原因2 testView 在 mas_makeConstraints中没有设置 center 所以无法更新
}];
解决办法:使用mas_remakeConstraints 清除原来的约束 重新设置约束;
}];
相关文章推荐
- Bootstrap选项卡与Masonry插件的完美结合
- jQuery.lazyload+masonry改良图片瀑布流代码
- jQuery Masonry瀑布流插件使用详解
- IOS自适配利器Masonry使用指南
- Bootstrap选项卡与Masonry插件的完美结合
- Masonry使用
- 导入一个一个第三方库import 报错头文件不存在
- 瀑布式布局实现
- Masonry 用法小结
- Masonry的使用
- masonry mas_updateConstains
- GitHub Masonry 说明文档翻译
- iOS自动布局实现Cell和Tableview高度自适应(SDAutoLayout)
- Masonry入门教程
- iOS —— Masonry的Autolayout
- Masonry基本用法
- cell自动计算高度(masonry与UITableView-FDTemplateLayoutCell)
- 8.Masonry的使用方法
- iOS开发篇(六)Masonry三方框架的使用与介绍
- Masory使用进阶