iOS中使用代码自动布局,采用代码对视图进行适配的一些语法介绍:
/*
使用规则
@"H:|-panding-[_tabBar]-0-|"
| 表示父视图
- 表示距离
V: 表示垂直
H: 表示水平
>= 表示视图间距、宽度和高度必须大于或等于某个值
<= 表示视图间距、宽度和高度必须小宇或等于某个值
== 表示视图间距、宽度或者高度必须等于某个值
@ >=、<=、== 限制 最大为 1000
1.|-[view]-| 视图处在父视图的左右边缘内
2.|-[view] 视图处在父视图的左边缘
3.|[view] 视图和父视图左边对齐
4.-[view]- 设置视图的宽度高度
5.|-30.0-[view]-30.0-| 表示离父视图 左右间距 30
@"H:|-0-[_tabBar]-0-|"
6.[view(200.0)] 表示视图宽度为 200.0
7.|-[view(view1)]-[view1]-|表示视图宽度一样,并且在父视图左右边缘内
8. V:|-[view(50.0)] 视图高度为 50
9: V:|-(==padding)-[imageView]->=0-[button]-(==padding)-| 表示离父视图的距离
为Padding,这两个视图间距必须大于或等于0并且距离底部父视图为 padding。
10: [wideView(>=60@700)] 视图的宽度为至少为60 不能超过 700,最大为1000
11: 如果没有声明方向默认为 水平 H:
*/
/*
*format 格式规范的约束条件。
*opts 为可视化格式字符串描述布局方向
*metrics 自己定义的字典,字典中的key可以写在format字符串中。编译器会自动替换为metrics字典中的value,值value必须是NSNumber对象。
*views是需要constraint关系的所有view.
*/
使用的代码列子:#import "BaseViewController.h"
@interface BaseViewController () {
UIButton * _selectBtn;
}
@end
@implementation BaseViewController
- (void)viewDidLoad
{
[superviewDidLoad];
self.navigationController.navigationBarHidden =YES;
//底部的tabbar
_tabBar = [[UIViewalloc] init];
设置视图自动调整尺寸的掩码是否转化为基于约束布局的约束
[_tabBarsetTranslatesAutoresizingMaskIntoConstraints:NO];
[self.viewaddSubview:_tabBar];
//设置tabbar的宽
// self.view addConstraint:[NSLayoutConstraint constraintsWithVisualFormat:<#(NSString *)#> options:<#(NSLayoutFormatOptions)#> metrics:(NSDictionary *) views:<#(NSDictionary *)#>]
NSDictionary *distanceDic =@{@"panding":@10};
[self.viewaddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@"H:|-panding-[_tabBar]-0-|"options:0metrics:distanceDic views:NSDictionaryOfVariableBindings(_tabBar)]];
//设置tabbar的高
[self.viewaddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@"V:[_tabBar(45)]-0-|"options:0metrics:nilviews:NSDictionaryOfVariableBindings(_tabBar)]];
UIButton * currentBtn =nil;
for (int i =0; i < 3; i++) {
UIButton * btn = [UIButtonbuttonWithType:UIButtonTypeCustom];
[btn setBackgroundColor:[UIColorcolorWithRed:arc4random() %250 / 255.0fgreen:arc4random() %250 / 255.0fblue:arc4random() %250 / 255.0falpha:1]];
[btn setTag:100 + i];
[btn setTranslatesAutoresizingMaskIntoConstraints:NO];
[btn addTarget:selfaction:@selector(btnClick:)forControlEvents:UIControlEventTouchUpInside];
[_tabBaraddSubview:btn];
if (i ==0) {
NSString *fomrmatStr = [NSStringstringWithFormat:@"H:|-0-[btn(%f)]",30.f];
[_tabBaraddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:fomrmatStroptions:0metrics:nilviews:NSDictionaryOfVariableBindings(btn)]];
_selectBtn = btn;
btn.selected =YES;
}
if (i ==1) {
// [_tabBar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:-[currentBtn(==btn)]-0-[btn]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(btn,currentBtn)]];
}
if (i ==2) {
[_tabBaraddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@"H:[currentBtn]-0-[btn(==currentBtn)]-0-|"options:0metrics:nilviews:NSDictionaryOfVariableBindings(btn,currentBtn)]];
}
[_tabBaraddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@"V:|-0-[btn]-0-|"options:0metrics:nilviews:NSDictionaryOfVariableBindings(btn)]];
currentBtn = btn;
[btn layoutIfNeeded];
}
_contentView = [[UIViewalloc] init];
[_contentViewsetTranslatesAutoresizingMaskIntoConstraints:NO];
[_contentViewsetBackgroundColor:[UIColorredColor]];
[self.viewaddSubview:_contentView];
[self.viewaddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@"H:|-0-[_contentView]-0-|"options:0metrics:nilviews:NSDictionaryOfVariableBindings(_contentView)]];
[self.viewaddConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@"V:|-0-[_contentView]-0-[_tabBar]-0-|"options:0metrics:nilviews:NSDictionaryOfVariableBindings(_contentView,_tabBar)]];
}
配置后的视图如下图所示: