美文网首页
代码实行Autolayout

代码实行Autolayout

作者: 丹丹十个胆小鬼 | 来源:发表于2018-12-06 16:30 被阅读0次

    自动布局的核心计算公式:
    obj1.property1 =(obj2.property2 * multiplier)+ constant value

    现在要实现一个效果:
    一个红色View,宽高都是100,一直在右下角,右边间距20,底部间距20,实现代码如下:

    UIView *redView = [[UIView alloc] init];
        redView.backgroundColor = [UIColor redColor];
        // 要先禁止autoresizing功能,设置view的下面属性为NO
        redView.translatesAutoresizingMaskIntoConstraints = NO;
        [self.view addSubview:redView];
        
        /*
         view1 :要约束的控件
         attr1 :约束的类型(做怎样的约束)
         relation :与参照控件之间的关系
         view2 :参照的控件
         attr2 :约束的类型(做怎样的约束)
         multiplier :乘数
         c :常量
         */
        // 一个NSLayoutConstraint对象代表一个约束
        NSLayoutConstraint *width_lc = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0 constant:100];
        [redView addConstraint:width_lc];
        
        NSLayoutConstraint *height_lc = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0 constant:100];
        [redView addConstraint:height_lc];
        
        NSLayoutConstraint *right_lc = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1 constant:-20];
        [self.view addConstraint:right_lc];
        
        NSLayoutConstraint *bottom_lc = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:-20];
        [self.view addConstraint:bottom_lc];
    

    在这里就要考虑一个问题,代码实现的约束要添加到哪一个控件呢?具体规则又是怎样的呢?

    • 规则1:对于两个同层级view之间的约束关系,添加到它们的父view上


      图 1.png
    • 规则2:对于两个不同层级view之间的约束关系,添加到他们最近的共同父view上


      图 2.png
    • 规则3:对于有层次关系的两个view之间的约束关系,添加到层次较高的父view上


      图 3.png

    相关文章

      网友评论

          本文标题:代码实行Autolayout

          本文链接:https://www.haomeiwen.com/subject/djyocqtx.html