Autolayout代碼實現舉例-01使用線性公式

Autolayout代碼實現舉例-01使用線性公式spa

1.例子1code

  需求: 令一個寬高都爲200的view永遠顯示在屏幕的中央。對象

 1    // 1.建立藍色view
 2     UIView *blueView =[[UIView alloc] init];
 3     blueView.backgroundColor = [UIColor blueColor];
 4         // 使用Autolayout必須關閉下面這個屬性, 意思是不要把AutoresizingMask應用到Contrainsts中
 5     blueView.translatesAutoresizingMaskIntoConstraints = NO;
 6         // 使用Autolayout以前必須把view加到父視圖上
 7     [self.view addSubview:blueView];
 8     
 9     
10     // 2.對紅色view添加約束
11     // 2.1.約束寬度
12     CGFloat width = 200;
13         // 建立約束對象, 實際是就是在表述線性公式  y = ax + b;
14     NSLayoutConstraint *widthConst = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:width];
15         // 與其餘view無關的約束只需加在本身的約束集合中
16     [blueView addConstraint:widthConst];
17     
18     // 2.2.約束高度
19     CGFloat height = 200;
20     NSLayoutConstraint *heightConst = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:height];
21     [blueView addConstraint:heightConst];
22     
23     // 2.3.約束中心位置
24     NSLayoutConstraint *centerXConst = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0];
25         // 與其餘view有關的約束加在離本身最近的父視圖上
26     [self.view addConstraint:centerXConst];
27     
28     NSLayoutConstraint *centerYConst = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0];
29     [self.view addConstraint:centerYConst];

           結果:  豎屏 :     橫屏: blog

2.例子2ip

  需求: 建立兩個View, 一個藍色, 一個紅色,  藍色距離屏幕最上面、左邊、右邊的距離爲20, 使紅色view的頂部與藍色view的底部的間距爲20,且二者的右邊緣對齊。
it

 

 1   // 1.藍色view
 2     UIView *blueView =[[UIView alloc] init];
 3     blueView.backgroundColor = [UIColor blueColor];
 4     blueView.translatesAutoresizingMaskIntoConstraints = NO;
 5     [self.view addSubview:blueView];
 6     
 7     // 2.紅色view
 8     UIView *redView =[[UIView alloc] init];
 9     redView.backgroundColor = [UIColor redColor];
10     redView.translatesAutoresizingMaskIntoConstraints = NO;
11     [self.view addSubview:redView];
12     
13     // 3.藍色view的約束
14     // 3.1.高度
15     CGFloat height = 40;
16     NSLayoutConstraint *blueHeight = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:height];
17     [blueView addConstraint:blueHeight];
18     
19     // 3.2.左邊間距
20     CGFloat margin = 20;
21     NSLayoutConstraint *leftMargin = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:margin];
22     [self.view addConstraint:leftMargin];
23     
24     // 3.3.右邊間距
25         // 注意constant的正負
26     NSLayoutConstraint *rightMargin = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:-margin];
27     [self.view addConstraint:rightMargin];
28     
29     // 3.4.頂部間距
30     NSLayoutConstraint *topMargin = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:margin];
31     [self.view addConstraint:topMargin];
32     
33     // 4.紅色view的約束
34     // 4.1.高度
35         // 注意這裏redView的高度關聯到blueView, 因此此約束必須加到他們共同的(且爲最近的)父視圖上, 不然引起崩潰
36     NSLayoutConstraint *redHeight = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0.0];
37     [self.view addConstraint:redHeight];
38     
39     // 4.2.左邊緣
40     NSLayoutConstraint *leftEadge = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0];
41     [self.view addConstraint:leftEadge];
42     
43     // 4.3.右邊間距 == blueView
44     NSLayoutConstraint *rightMarginRed = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeRight multiplier:1.0 constant:0.0];
45     [self.view addConstraint:rightMarginRed];
46     
47     // 4.4.頂部間距 == blueView底部 + 20
48     NSLayoutConstraint *topMarginRed = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:margin];
49     [self.view addConstraint:topMarginRed];

 

結果:  豎屏  橫屏:
io

相關文章
相關標籤/搜索