使用系統(tǒng)自帶類進行自動布局必須理解的一個公式
+(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 這個屬性可以用來進行倍數(shù)的放大和縮小
如果你想設(shè)置的約束里不需要第二個view酬荞,要將第四個參數(shù)設(shè)為nil垒手,第五個參數(shù)設(shè)為NSLayoutAttributeNotAnAttribute
舉例:
[NSLayoutConstraint constraintWithItem:view1
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:view2
attribute:NSLayoutAttributeRight
multiplier:1
constant:10];
翻譯過來就是:view1的左側(cè)诱篷,在此叠,view2的右側(cè),再多10個點康二,的地方漓骚。
系統(tǒng)類的使用
- 使用注意點
1.1. 要對子視圖進行布局的時候, 子視圖必須先添加到父視圖的內(nèi)部
[self.view addSubview:myView];
1.2. 取消子視圖的Autoresizing
練習1.
將 myView 設(shè)置為 距離 self.view 的四周的間隙為 10
Snip20151029_7.png
//居中 的寫法
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:btn attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];
//距離底部20單位
//注意NSLayoutConstraint創(chuàng)建的constant是加在toItem參數(shù)的废境,所以需要-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]];
// 關(guān)系枚舉
typedef NS_ENUM(NSInteger, NSLayoutRelation) {
NSLayoutRelationLessThanOrEqual = -1, 小于等于
NSLayoutRelationEqual = 0, 等于
NSLayoutRelationGreaterThanOrEqual = 1, 大于等于
};
// 約束的枚舉
typedef NS_ENUM(NSInteger, NSLayoutAttribute) {
NSLayoutAttributeLeft = 1, 左側(cè)
NSLayoutAttributeRight, 右側(cè)
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的區(qū)別是left/right永遠是指左右贰盗,而leading/trailing在某些從右至左習慣的地區(qū)會變成许饿,leading是右邊,trailing是左邊舵盈。(大概是⊙﹏⊙b)