IOS-Frameworks-UIKit-NSLayoutConstraint 自动布局注意事项

//自动布局注意事项:

-(void)layoutTestFunc

{

    

   UIView * view0 = [[UIViewalloc]init];

    

    //注意事项1:设置translatesAutoresizingMaskIntoConstraintsNO;

    view0.translatesAutoresizingMaskIntoConstraints =NO;

    //注意事项2:两个view在同一个hierarchy中才有可能添加相关约束。

    [self.viewaddSubview:view0];

    

    //注意事项3:firstAttribute不为宽或者高时,multipler不能为0

   /*

    NSLayoutConstraint * con = [NSLayoutConstraint constraintWithItem:view0 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:0.0 constant:9];

    //[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: A multiplier of 0 or a nil second item together with a location for the first attribute creates an illegal constraint of a location equal to a constant. Location attributes must be specified in pairs'

    */

    

    //注意事项4:同上,当firstAttribute不为宽或者高时,secondItem不能为nil

    //NSLayoutConstraint * con = [NSLayoutConstraint constraintWithItem:view0 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeLeft multiplier:1.0 constant:9];


    //当两个Attribute全是宽或高时multiplier才可以为0

    NSLayoutConstraint * con0 = [NSLayoutConstraintconstraintWithItem:view0 attribute:NSLayoutAttributeWidthrelatedBy:NSLayoutRelationEqualtoItem:self.viewattribute:NSLayoutAttributeWidthmultiplier:0.0constant:9];

   NSLog(@"%@",con0);

    

    //secondItemnil时,secondAttribute应为NSLayoutAttributeNotAnAttribute

    NSLayoutConstraint * con1 = [NSLayoutConstraintconstraintWithItem:view0 attribute:NSLayoutAttributeWidthrelatedBy:NSLayoutRelationEqualtoItem:nilattribute:NSLayoutAttributeNotAnAttributemultiplier:0.0constant:9];

   

    

    [self.viewaddConstraint:con1];

    

    //包括:"<NSLayoutConstraint:0x7fb5a84675e0 H:[UIView:0x7fb5a86528c0(9)]>"

    NSLog(@"%@",self.view.constraints);

    

    //空,注意虽然con理论上只涉及view0,但是view0constraints并不包含约束con1

    NSLog(@"%@",view0.constraints);

    

    

   UIView * view1 = [[UIViewalloc]init];

   UIView * view2 = [[UIViewalloc]init];

   UIView * view3 = [[UIViewalloc]init];

    view1.translatesAutoresizingMaskIntoConstraints =NO;

    view2.translatesAutoresizingMaskIntoConstraints =NO;

    view3.translatesAutoresizingMaskIntoConstraints =NO;

    

    [view2addSubview:view3];

    [view1addSubview:view2];

    [self.viewaddSubview:view1];

    

    NSLayoutConstraint * con2 = [NSLayoutConstraintconstraintWithItem:view2 attribute:NSLayoutAttributeLeadingrelatedBy:NSLayoutRelationEqualtoItem:view3 attribute:NSLayoutAttributeLeadingmultiplier:1.0constant:39];

    

    [self.viewaddConstraint:con2];

    

    NSLog(@"%@",self.view.constraints);

    //包括"<NSLayoutConstraint:0x7f82e0d2b090 UIView:0x7f82e0d2ab50.leading == UIView:0x7f82e0d2ae80.leading + 39>"

    

    //空,虽然约束是关于view2,与view3view2view3最近的父视图是view1,但是下面全为空。

    NSLog(@"%@",view1.constraints);

   //

    NSLog(@"%@",view2.constraints);

   //

    NSLog(@"%@",view3.constraints);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值