masonry能和xib结合使用吗
2个回答
2016-03-28
展开全部
可以结合使用。
使用常规的Masonry语法完成布局的代码是这样的
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view.mas_left).with.offset(0);
make.bottom.equalTo(self.view.mas_bottom).with.offset(0);
make.height.equalTo(@100);
}];
[blueView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(redView.mas_right).with.offset(0);
make.bottom.equalTo(self.view.mas_bottom).with.offset(0);
make.width.equalTo(redView.mas_width).with.offset(0);
make.height.equalTo(redView.mas_height).with.offset(0);
}];
[greenView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(blueView.mas_right).with.offset(0);
make.bottom.equalTo(self.view.mas_bottom).with.offset(0);
make.right.equalTo(self.view.mas_right).with.offset(0);
make.width.equalTo(blueView.mas_width).with.offset(0);
make.height.equalTo(blueView.mas_height).with.offset(0);
}];
代码中可以看到具体的逻辑还是特别清晰的。可以清楚地了解各个控件间的关系,基本上每一行代表着xib中的一根约束。
并且Masonry支持了一些省略和简写:
如果是两个控件的同一个位置(约束)之间的联系,括号中可以只写以来的控件约束可以省略;
如果约束依赖的是同一个控件,那可以用and将两个约束连在一行写;
如果偏移量offset是0,后面的with.offset(0)可以省略;
将上面的代码最简可以写成如下
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.and.bottom.equalTo(self.view);
make.height.equalTo(@100);
}];
[blueView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.and.width.and.height.equalTo(redView);
make.left.equalTo(redView.mas_right);
}];
[greenView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.and.width.and.height.equalTo(blueView);
make.right.equalTo(self.view);
make.left.equalTo(blueView.mas_right);
}];
注:对于这种几个模块功能相似位置相近的,建议多包一层父控件,便于整个组件的操作与抽离,并且可以从宏观的角度看项目结构更加清晰。
使用常规的Masonry语法完成布局的代码是这样的
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view.mas_left).with.offset(0);
make.bottom.equalTo(self.view.mas_bottom).with.offset(0);
make.height.equalTo(@100);
}];
[blueView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(redView.mas_right).with.offset(0);
make.bottom.equalTo(self.view.mas_bottom).with.offset(0);
make.width.equalTo(redView.mas_width).with.offset(0);
make.height.equalTo(redView.mas_height).with.offset(0);
}];
[greenView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(blueView.mas_right).with.offset(0);
make.bottom.equalTo(self.view.mas_bottom).with.offset(0);
make.right.equalTo(self.view.mas_right).with.offset(0);
make.width.equalTo(blueView.mas_width).with.offset(0);
make.height.equalTo(blueView.mas_height).with.offset(0);
}];
代码中可以看到具体的逻辑还是特别清晰的。可以清楚地了解各个控件间的关系,基本上每一行代表着xib中的一根约束。
并且Masonry支持了一些省略和简写:
如果是两个控件的同一个位置(约束)之间的联系,括号中可以只写以来的控件约束可以省略;
如果约束依赖的是同一个控件,那可以用and将两个约束连在一行写;
如果偏移量offset是0,后面的with.offset(0)可以省略;
将上面的代码最简可以写成如下
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.and.bottom.equalTo(self.view);
make.height.equalTo(@100);
}];
[blueView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.and.width.and.height.equalTo(redView);
make.left.equalTo(redView.mas_right);
}];
[greenView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.and.width.and.height.equalTo(blueView);
make.right.equalTo(self.view);
make.left.equalTo(blueView.mas_right);
}];
注:对于这种几个模块功能相似位置相近的,建议多包一层父控件,便于整个组件的操作与抽离,并且可以从宏观的角度看项目结构更加清晰。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询