美文网首页
代码实行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