2015-10-29

[iOS] Auto Layout - NSLayoutConstraint

Object - C: 

NSMutableArray *myConstraints = [NSMutableArray array];
    
    NSDictionary *variableBindings = @{@"_btn_cancel" : _btn_cancel};
    NSDictionary *metrics = @{@"height": 100,
                              @"margin": 10};
    
   
    // ex1: 從水平方向佈局
    [myConstraints addObjectsFromArray:
     [NSLayoutConstraint constraintsWithVisualFormat:
                @"H:|-margin-[_btn_cancel(height)]-|"
                    options:NSLayoutFormatDirectionLeadingToTrailing
                    metrics:metrics
                     views:variableBindings]];
    
 //ex2: 從垂直方向佈局
 [myConstraints addObjectsFromArray:
    [NSLayoutConstraint constraintsWithVisualFormat:
        @"V:[ViewB(ViewA)]-|"
        options:NSLayoutFormatDirectionLeadingToTrailing
        metrics:nil
        views:NSDictionaryOfVariableBindings(ViewB,ViewA)]];
    


    [self.view addConstraints:myConstraints];



參數說明:

 options: 佈局時的順序,預設是由上而下(垂直)與由左而右(水平)

 metrics : 一般为nil ,参数类型为NSDictionary, 為要傳入的變數

views :
参数类型为NSDictionary, 為要傳入的Views



語法:


 " V: " " H: "
分別代表由垂直或是水平方向來佈局。

" | "
代表 Superview 的邊界。

" - "
代表預設距離,例如在中間加上數字 " -20- ",則代表限制 20 個單位距離。

*" [ ] "
代表物件本身,括號內包含物件的變數名稱與大小限制,可以使用關係運算子(<=、> == 等)。

* " @ "
優先權,1 1000 的整數,優先權較大的條件會優先被滿足,例如 [ViewB(>=100@1000)],物件 ViewB 不可以小於 100 個單位長度或寬度會最優先被考慮。