AutoLayout 使用技巧——自动布局, 系统自带的类的使用

使用系统自带类进行自动布局必须理解的一个公式

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


** 解释:** 某个 view1 的 attribute1 等于(小于或等于/大于或等于)某个 view2 的 attribute2 的 multiplier 倍 加上 constant

** 简明公式:** view1.attribute1 = view2.attribute2 * multiplier + constant;

说明:multiplier 这个属性可以用来进行倍数的放大和缩小
      如果你想设置的约束里不需要第二个view,要将第四个参数设为nil,第五个参数设为NSLayoutAttributeNotAnAttribute
举例: 
[NSLayoutConstraint constraintWithItem:view1  
                             attribute:NSLayoutAttributeLeft  
                             relatedBy:NSLayoutRelationEqual  
                                toItem:view2  
                             attribute:NSLayoutAttributeRight  
                            multiplier:1  
                              constant:10];
翻译过来就是:view1的左侧,在,view2的右侧,再多10个点,的地方。

系统类的使用

  1. 使用注意点
    1.1. 要对子视图进行布局的时候, 子视图必须先添加到父视图的内部
    [self.view addSubview:myView];
    1.2. 取消子视图的 Autoresizing

练习1.
将 myView 设置为 距离 self.view 的四周的间隙为 10


AutoLayout 使用技巧——自动布局, 系统自带的类的使用_第1张图片
Snip20151029_7.png
//居中 的写法
 [self.view addConstraint:[NSLayoutConstraint constraintWithItem:btn  attribute:NSLayoutAttributeCenterX  relatedBy:NSLayoutRelationEqual  toItem:self.view  attribute:NSLayoutAttributeCenterX  multiplier:1  constant:0]];
     
     
//距离底部20单位
//注意NSLayoutConstraint创建的constant是加在toItem参数的,所以需要-20。
[self.view addConstraint:[NSLayoutConstraint  constraintWithItem:btn  attribute:NSLayoutAttributeBottom  relatedBy:NSLayoutRelationEqual  toItem:self.view  attribute:NSLayoutAttributeBottom  multiplier:1  constant:-20]];
  
//定义高度是父View的三分之一
[self.view addConstraint:[NSLayoutConstraint  constraintWithItem:btn  attribute:NSLayoutAttributeHeight  relatedBy:NSLayoutRelationEqual  toItem:self.view  attribute:NSLayoutAttributeHeight  multiplier:0.3  constant:0]];
 // 关系枚举
     typedef NS_ENUM(NSInteger, NSLayoutRelation) {
        NSLayoutRelationLessThanOrEqual = -1,                           小于等于
        NSLayoutRelationEqual = 0,                                      等于
        NSLayoutRelationGreaterThanOrEqual = 1,                         大于等于
     };
     
     
     // 约束的枚举
     typedef NS_ENUM(NSInteger, NSLayoutAttribute) {
     NSLayoutAttributeLeft = 1,                                         左侧
     NSLayoutAttributeRight,                                            右侧
     NSLayoutAttributeTop,                                              上方
     NSLayoutAttributeBottom,                                           下方
     NSLayoutAttributeLeading,                                          前面(首部)
     NSLayoutAttributeTrailing,                                         后面(尾部)
     NSLayoutAttributeWidth,                                            宽
     NSLayoutAttributeHeight,                                           高
     NSLayoutAttributeCenterX,                                          中心x(x轴中心)
     NSLayoutAttributeCenterY,                                          中心y(y轴中心)
     NSLayoutAttributeBaseline,                                         文本底标线 (通常是指视图的底部放文字的地方)
     NSLayoutAttributeLastBaseline = NSLayoutAttributeBaseline,
     NSLayoutAttributeFirstBaseline NS_ENUM_AVAILABLE_IOS(8_0),
     
     
     NSLayoutAttributeLeftMargin NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeRightMargin NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeTopMargin NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeBottomMargin NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeLeadingMargin NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeTrailingMargin NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeCenterXWithinMargins NS_ENUM_AVAILABLE_IOS(8_0),
     NSLayoutAttributeCenterYWithinMargins NS_ENUM_AVAILABLE_IOS(8_0),
     
     NSLayoutAttributeNotAnAttribute = 0                                没有约束
     };
     
     NSLayoutAttributeLeft/NSLayoutAttributeRight 和NSLayoutAttributeLeading/NSLayoutAttributeTrailing的区别是left/right永远是指左右,而leading/trailing在某些从右至左习惯的地区会变成,leading是右边,trailing是左边。(大概是⊙﹏⊙b)

你可能感兴趣的:(AutoLayout 使用技巧——自动布局, 系统自带的类的使用)