原理如下:
代码自己将其拷贝到viewcontroller.m参看
#import "ViewController.h"
#define WIDTH [UIScreen mainScreen].bounds.size.width
#define HEIGHT [UIScreen mainScreen].bounds.size.height
@interface ViewController ()
@property (nonatomic, strong) UIView *myView1;
@property (nonatomic, strong) UIView *myView2;
@property (nonatomic, strong) UIView *myView3;
@end
@implementation ViewController
- (UIView *)myView1
{
if(!_myView1)
{
self.myView1 = [[UIView alloc]init];
[self.myView1 setBackgroundColor:[UIColor blueColor]];
[self.myView1 setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:self.myView1];
}
return _myView1;
}
- (UIView *)myView2
{
if(!_myView2)
{
self.myView2 = [[UIView alloc]init];
[self.myView2 setBackgroundColor:[UIColor blueColor]];
[self.myView2 setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:self.myView2];
}
return _myView2;
}
- (UIView *)myView3
{
if(!_myView3)
{
self.myView3 = [[UIView alloc]init];
[self.myView3 setBackgroundColor:[UIColor blueColor]];
[self.myView3 setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:self.myView3];
}
return _myView3;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.view setBackgroundColor:[UIColor orangeColor]];
[self.view addSubview:self.myView1];
NSLayoutConstraint *myView1Top =
[NSLayoutConstraint constraintWithItem:self.myView1 //给谁加约束
attribute:NSLayoutAttributeTop //给哪个边加约束
relatedBy:NSLayoutRelationEqual //什么关系 这里是等于
toItem:self.view //相对于哪个视图
attribute:NSLayoutAttributeTop //相对于这个视图的哪个边
multiplier:1 //多少倍
constant:20]; //距离多少 右正左负
NSLayoutConstraint *myView1left = [NSLayoutConstraint constraintWithItem:self.myView1 attribute:NSLayoutAttributeLeft relatedBy:0 toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1 constant:10];
[myView1Top setActive:YES];
[myView1left setActive:YES];
NSLayoutConstraint *myView1Width = [NSLayoutConstraint constraintWithItem:self.myView1 attribute:NSLayoutAttributeWidth relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:(WIDTH-10)/2.0];
NSLayoutConstraint *myView1Height = [NSLayoutConstraint constraintWithItem:self.myView1 attribute:NSLayoutAttributeHeight relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:(HEIGHT-10)/2.0];
[myView1Height setActive:YES];
[myView1Width setActive:YES];
NSLayoutConstraint *myView2Bottom = [NSLayoutConstraint constraintWithItem:self.myView2 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.myView1 attribute:NSLayoutAttributeHeight multiplier:1 constant:0];
NSLayoutConstraint *myView2Top = [NSLayoutConstraint constraintWithItem:self.myView2 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:20];
NSLayoutConstraint *myView2Left = [NSLayoutConstraint constraintWithItem:self.myView2 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.myView1 attribute:NSLayoutAttributeRight multiplier:1 constant:10];
NSLayoutConstraint *myView2Right = [NSLayoutConstraint constraintWithItem:self.myView2 attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1 constant:-10];
[myView2Bottom setActive:YES];
[myView2Top setActive:YES];
[myView2Left setActive:YES];
[myView2Right setActive:YES];
NSLayoutConstraint *myView3Bottom = [NSLayoutConstraint constraintWithItem:self.myView3 attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:-20];
NSLayoutConstraint *myView3Top = [NSLayoutConstraint constraintWithItem:self.myView3 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.myView1 attribute:NSLayoutAttributeBottom multiplier:1 constant:10];
NSLayoutConstraint *myView3Left = [NSLayoutConstraint constraintWithItem:self.myView3 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1 constant:10];
NSLayoutConstraint *myView3Right = [NSLayoutConstraint constraintWithItem:self.myView3 attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1 constant:-10];
[myView3Bottom setActive:YES];
[myView3Top setActive:YES];
[myView3Left setActive:YES];
[myView3Right setActive:YES];
}