天天看点

Objective-C学习之NSLayoutConstraint(自动布局)

NSLayoutConstraint(自动布局)

       添加

autoLayout

视图使用该方法

+(instancetype)constraintWithItem:(id)view1 
                        attribute:(NSLayoutAttribute)attr1 
                        relatedBy:(NSLayoutRelation)relation 
                           toItem:(nullable id)view2 
                        attribute:(NSLayoutAttribute)attr2 
                       multiplier:(CGFloat)multiplier 
                         constant:(CGFloat)c;
           

       该方法实际上就是满足一个数学关系

       第一个参数 view1: 要设置的视图;

       第二个参数 attr1: view1要设置的属性,稍后详解;

       第三个参数 relation: 视图view1和view2的指定属性之间的关系,稍后详解;

       第四个参数 view2: 参照的视图;

       第五个参数 attr2: 参照视图view2的属性,稍后详解;

       第六个参数 multiplier: 视图view1的指定属性是参照视图view2制定属性的多少倍;

       第七个参数 c: 视图view1的指定属性需要加的浮点数。

       举个简单的例子来说我们想设置第一个视图的宽度是第二个视图宽度的2倍,我们可以这样写:

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:view2 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:view1 attribute:NSLayoutAttributeWidth multiplier: constant:]];
           

       可以看到这里我们

       item1是view1;

       item2是view2;

       attr1是attribute:NSLayoutAttributeWidth;

       attr2是attribute:NSLayoutAttributeWidth;

       relation是NSLayoutRelationEqual;

       mutiplier 是2;

       constant是0.

       带入上面的公式得:

       第一个视图(宽度) = 2 * 第二个视图(宽度) + 0

       如下是我们所有可以控制的属性:

属性名 含义
NSLayoutAttributeLeft 视图的左边
NSLayoutAttributeRight 视图的右边
NSLayoutAttributeTop 视图的上边
NSLayoutAttributeBottom 视图的下边
NSLayoutAttributeLeading 视图的前边
NSLayoutAttributeTrailing 视图的后边
NSLayoutAttributeWidth 视图的宽度
NSLayoutAttributeHeight 视图的高度
NSLayoutAttributeCenterX 视图的中点的X值
NSLayoutAttributeCenterY 视图中点的Y值
NSLayoutAttributeBaseline 视图的基准线
NSLayoutAttributeNotAnAttribute 无属性