自动适配之LayoutConstriant代码适配


代码如下:


- (void)viewDidLoad

{

    [super viewDidLoad];

    self.title = @"NSLayoutConstraint适配";

     //创建imgView1

    imgView1 = [[UIImageView alloc] init];

    imgView1.image = [UIImage imageNamed:@"1"];

    [self.view addSubview:imgView1];    

    //创建imgView2

    imgView2 = [[UIImageView alloc] init];    

    imgView2.image = [UIImage imageNamed:@"3"];    

    [self.view addSubview:imgView2];    

    //不对imgView1使用autoResizing(使用autolayout就不能使用autoResizing

    imgView1.translatesAutoresizingMaskIntoConstraints = NO;  

    imgView2.translatesAutoresizingMaskIntoConstraints = NO;

    [self addMyLayoutConstriant];

}

#pragma mark 代码添加约束

- (void)addMyLayoutConstriant

{   

    //代码创建约束

    //NSLayoutConstraint 是创建约束对象的类名  

    /************imgView1*************/   

    //创建imgView1的上边的约束

    //第一个参数:要约束的视图对象(也就是要对哪一个视图添加约束)

    //第二个参数:要添加的约束的属性类型,(也就是要添加的是上 等这些属性)

    //第三个参数:相对关系,分为 等于  小于  大于

    //第四个参数:相对于哪一个视图对象

    //第五个参数:相对视图的哪一个属性 ,比如 下。。。

    //第六个参数:乘数  倍数,(也就是第一个视图的属性值是第二个视图属性值得倍数)通常是1.0

    //第七个参数:常量

    /*

    以上几个参数 综合起来组成了一个表达式:    

    item1的属性值 =/<=/>= 第二个视图的属性值 * multiplier + constant    

    即:第一个视图的属性值 =/<=/>= 第二个视图的属性值 * 倍数 + 常量

     */ 

    //上约束 20

    NSLayoutConstraint *imgView1Top = [NSLayoutConstraint constraintWithItem:imgView1 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:84];    

    //添加约束,约束添加在父视图上,因为布局是相对于父视图来布局

    [self.view addConstraint:imgView1Top];    

    //左约束  20

    NSLayoutConstraint *imgView1Left = [NSLayoutConstraint constraintWithItem:imgView1 attribute:NSLayoutAttributeLeft relatedBy:0 toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:20];    

    [self.view addConstraint:imgView1Left];   

    //下约束 20

    NSLayoutConstraint *imgView1Bottom = [NSLayoutConstraint constraintWithItem:imgView1 attribute:NSLayoutAttributeBottom relatedBy:0 toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-20];    

    [self.view addConstraint:imgView1Bottom];  

    //右约束 20

    NSLayoutConstraint *imgView1Right = [NSLayoutConstraint constraintWithItem:imgView1 attribute:NSLayoutAttributeRight relatedBy:0 toItem:imgView2 attribute:NSLayoutAttributeLeft multiplier:1.0 constant:-20];    

    [self.view addConstraint:imgView1Right];

    

    

    /************imgView2*************/

    //可以相对于self.view 也可以相对于imgView1 设置imgView2的约束

    // 20

    NSLayoutConstraint *imgView2Top = [NSLayoutConstraint constraintWithItem:imgView2 attribute:NSLayoutAttributeTop relatedBy:0 toItem:imgView1 attribute:NSLayoutAttributeTop multiplier:1 constant:0];

    

    // 20

    NSLayoutConstraint *imgView2Right = [NSLayoutConstraint constraintWithItem:imgView2 attribute:NSLayoutAttributeTrailing relatedBy:0 toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:-20];

    

    // 20

    NSLayoutConstraint *imgView2Bottom = [NSLayoutConstraint constraintWithItem:imgView2 attribute:NSLayoutAttributeBottom relatedBy:0 toItem:imgView2.superview attribute:NSLayoutAttributeBottom multiplier:1 constant:-20];

    

    //等宽约束

    NSLayoutConstraint *equalWidth = [NSLayoutConstraint constraintWithItem:imgView2 attribute:NSLayoutAttributeWidth relatedBy:0 toItem:imgView1 attribute:NSLayoutAttributeWidth multiplier:1 constant:0];

    

    //一次性添加多个约束

    [self.view addConstraints:@[imgView2Top,imgView2Right,imgView2Bottom,equalWidth]];

    

    

    //约束还可以修改 删除 设置是否有效

    

    //修改

    //imgView1Bottom.constant = imgView1Bottom.constant + 20;

    

    //删除约束

    //删除单个约束

    //[self.view removeConstraint:imgView1Bottom];

    

    //删除多个约束

    //[self.view removeConstraints:@[imgView1Bottom,imgView1Left]];

    

    //使约束失效 继续有效

    

    //让某些约束失效

    //[NSLayoutConstraint deactivateConstraints:@[imgView1Left,imgView1Right]];

    

    //让某些约束继续有效

    //[NSLayoutConstraint activateConstraints:@[imgView1Right,imgView1Left]];

    

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值