前言:
这里只是简单介绍他俩的使用方法,大家了解一下就行了,小编并不太推荐这两种加约束的方法,原因就是Autoresizing逻辑比较绕,而且面对复杂的界面,约束起来比较吃力,而Autolayout功能虽然强大,但用代码加约束的话代码比较繁琐,代码量也较大(以上观点大神们请无视,仅代表个人观点).个人比较推荐使用Masonry(http://blog.csdn.net/zlj_jeck/article/details/51453299)或者VFL语法(http://blog.csdn.net/zlj_jeck/article/details/51459855)来加约束,有兴趣的小伙伴们点连接进去看就好了,我都做了详细介绍,并上传了demo至GitHub,至于他们的优劣还是自己来对比吧,下面进入正题:
首先是Autolayout的使用
- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor grayColor]; //这里不需要给frame UIView *subView = [[UIView alloc] initWithFrame:CGRectZero]; subView.backgroundColor = [UIColor redColor]; [self.view addSubview:subView]; //关闭Autoresizing [subView setTranslatesAutoresizingMaskIntoConstraints:NO]; //添加单个约束 //语法格式 // view1.attribute1 = view2.attribute2 * multiplier + constant //例如: //subView.top = self.view.top*1+20 NSLayoutConstraint *topConstrait = [NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:20]; //subView.left = self.view.left*1+20 NSLayoutConstraint *leftConstrait = [NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1 constant:20]; //固定宽度 //subView.width = 200 NSLayoutConstraint *widthConstrait = [NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:200]; //subView.height = 200 NSLayoutConstraint *heightConstrait = [NSLayoutConstraint constraintWithItem:subView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:200]; //注意约束的添加位置 //将上边距和左边距的约束加在父视图即self.view上 [self.view addConstraints:@[topConstrait,leftConstrait]]; //将宽和高的约束添加到自身即subView上 [subView addConstraints:@[widthConstrait,heightConstrait]]; }接下来是运行效果图
大家也看到了吧,就做出这么一个视图来,就需要这么多的代码,如果界面比较复杂有多个视图呢?看到这里小伙伴们应该明白了为什么我不推荐使用这个Autolayout来加约束了吧,但了解了解Autolayout的实现原理也不是什么坏事对吧.
接下来是Autoresizing的使用
UIViewAutoresizingNone就是不自动调整.
UIViewAutoresizingFlexibleLeftMargin 自动调整与superView左边的距离,保证与superView右边的距离不变。
UIViewAutoresizingFlexibleRightMargin 自动调整与superView的右边距离,保证与superView左边的距离不变。
UIViewAutoresizingFlexibleTopMargin 自动调整与superView顶部的距离,保证与superView底部的距离不变。
UIViewAutoresizingFlexibleBottomMargin 自动调整与superView底部的距离,也就是说,与superView顶部的距离不变。
UIViewAutoresizingFlexibleWidth 自动调整自己的宽度,保证与superView左边和右边的距离不变。
UIViewAutoresizingFlexibleHeight 自动调整自己的高度,保证与superView顶部和底部的距离不变。
//调用方法如下(其他方法用法类似,不做详解) self.view.autoresizingMask = UIViewAutoresizingNone;