- 代码适配
此种方式最为繁琐,不仅要各种乱七八糟一顿算,还要各种宽高,建议是简单界面还好 ,复杂界面,实在是麻烦
- (void)codeAdaptation{
self.bgview.frame = CGRectMake(15, 50, [UIScreen mainScreen].bounds.size.width-30, 250);
self.topview.frame = CGRectMake(30, 15, self.bgview.frame.size.width - 60 , 80);
self.leftview.frame = CGRectMake(30, 15+80+20, 100, 100);
self.rightview.frame = CGRectMake(self.bgview.frame.size.width-30-100, 15+80+20, 100, 100);
}
- 接下来是常用的三方Masonry适配
这个方法就简单很多,链式
- (void)masonryAdaptation{
[self.bgview mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.view.mas_left).mas_offset(15);
make.right.mas_equalTo(self.view.mas_right).mas_offset(-15);
make.top.mas_equalTo(self.view.mas_top).mas_offset(50);
make.height.mas_equalTo(250);
}];
[self.topview mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.bgview.mas_left).mas_offset(30);
make.right.mas_equalTo(self.bgview.mas_right).mas_offset(-30);
make.top.mas_equalTo(self.bgview.mas_top).mas_offset(15);
make.height.mas_equalTo(80);
}];
[self.leftview mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.topview.mas_left);
make.top.mas_equalTo(self.topview.mas_bottom).mas_offset(20);
make.height.width.mas_equalTo(100);
}];
[self.rightview mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.mas_equalTo(self.topview.mas_right);
make.top.mas_equalTo(self.leftview.mas_top);
make.height.width.mas_equalTo(100);
}];
}
Masonry适配一定要注意一点,在是配置前一定要保证,视图已经addSubview了,否则就崩溃,
其中,适配使用
mas_makeConstraints:<#^(MASConstraintMaker *make)block#>
更新约束使用
mas_updateConstraints:<#^(MASConstraintMaker *make)block#>
比例约束的时候使用multipliedBy比如上边的代码修改为
[self.rightview mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.mas_equalTo(self.topview.mas_right);
make.top.mas_equalTo(self.leftview.mas_top);
make.height.width.mas_equalTo(self.leftview.mas_width).multipliedBy(0.5);
}];
那么显示就成了
这样子
日常常用的基本就是这些
另外
masonry适配使用mas_equalTo和equalto的时候,要注意mas是宏定义可以看出来是
#define mas_equalTo(...) equalTo(MASBoxValue((__VA_ARGS__)))
完整的是
#define mas_equalTo(...) equalTo(MASBoxValue((__VA_ARGS__)))
#define mas_greaterThanOrEqualTo(...) greaterThanOrEqualTo(MASBoxValue((__VA_ARGS__)))
#define mas_lessThanOrEqualTo(...) lessThanOrEqualTo(MASBoxValue((__VA_ARGS__)))
#define mas_offset(...) valueOffset(MASBoxValue((__VA_ARGS__)))
#ifdef MAS_SHORTHAND_GLOBALS
#define equalTo(...) mas_equalTo(__VA_ARGS__)
#define greaterThanOrEqualTo(...) mas_greaterThanOrEqualTo(__VA_ARGS__)
#define lessThanOrEqualTo(...) mas_lessThanOrEqualTo(__VA_ARGS__)
#define offset(...) mas_offset(__VA_ARGS__)
#endif
- 最后一种,就是使用sb或者xib的时候很好用的布局了
比如上边的我们只需要挨个添加约束就好了
此时添加约束 你可以自己选中之后按住control不松手 然后拖动出现那条线就会出现布局比如
点击选中你想要添加的即可
或者是点击
也会出现添加约束
也是添加你想要的约束即可
当然你甚至可以在xib或者sb上边直接操作
但是三种方式的效果都是一样的
按照我们的思路,我们需要固定左右上边距,自身高度,宽度自适应,那么添加好的约束就是
这样子
点击右边的尺子 我们还可以继续调整
某些情况下 我们还可以设置最大最小
就像这样子 都是可以的
点击这里
可以清除你所添加的约束