使用程式碼實現Autolayout的方法

weixin_34128411發表於2016-04-13

使用程式碼實現Autolayout的方法1

  • 建立約束
+(id)constraintWithItem:(id)view1
attribute:(NSLayoutAttribute)attr1
relatedBy:(NSLayoutRelation)relation
toItem:(id)view2
attribute:(NSLayoutAttribute)attr2
multiplier:(CGFloat)multiplier
constant:(CGFloat)c;
* view1 :要約束的控制元件
* attr1 :約束的型別(做怎樣的約束)
* relation :與參照控制元件之間的關係
* view2 :參照的控制元件
* attr2 :約束的型別(做怎樣的約束)
* multiplier :乘數
* c :常量
  • 新增約束
- (void)addConstraint:(NSLayoutConstraint *)constraint;
- (void)addConstraints:(NSArray *)constraints;
  • 注意
    • 一定要在擁有父控制元件之後再新增約束
    • 關閉Autoresizing功能
    view.translatesAutoresizingMaskIntoConstraints = NO;
    

使用程式碼實現Autolayout的方法2 - VFL

  • 使用VFL建立約束陣列
+ (NSArray *)constraintsWithVisualFormat:(NSString *)format
options:(NSLayoutFormatOptions)opts
metrics:(NSDictionary *)metrics
views:(NSDictionary *)views;
* format :VFL語句
* opts :約束型別
* metrics :VFL語句中用到的具體數值
* views :VFL語句中用到的控制元件
  • 使用下面的巨集來自動生成views和metrics引數
NSDictionaryOfVariableBindings(...)

使用程式碼實現Autolayout的方法3 - Masonry

  • 使用步驟
    • 新增Masonry資料夾的所有原始碼到專案中
    • 新增2個巨集、匯入主標頭檔案
    // 只要新增了這個巨集,就不用帶mas_字首
    #define MAS_SHORTHAND
    

// 只要新增了這個巨集,equalTo就等價於mas_equalTo

define MAS_SHORTHAND_GLOBALS

// 這個標頭檔案一定要放在上面兩個巨集的後面

import "Masonry.h"

```
  • 新增約束的方法
// 這個方法只會新增新的約束
 [view makeConstraints:^(MASConstraintMaker *make) {

 }];

// 這個方法會將以前的所有約束刪掉,新增新的約束
 [view remakeConstraints:^(MASConstraintMaker *make) {

 }];

 // 這個方法將會覆蓋以前的某些特定的約束
 [view updateConstraints:^(MASConstraintMaker *make) {

 }];
  • 約束的型別
1.尺寸:width\height\size
2.邊界:left\leading\right\trailing\top\bottom
3.中心點:center\centerX\centerY
4.邊界:edges

相關文章