你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS_autoLayout(VFL)

iOS_autoLayout(VFL)

編輯:IOS開發綜合

SLayoutConstraint的第二個類方法

+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views; 其中format就是VFL字符串,比如@"H:|-10-[view]-20-|",一會詳細說明。opts是枚舉參數,默認是0。
typedef NS_OPTIONS(NSUInteger, NSLayoutFormatOptions) {
    NSLayoutFormatAlignAllLeft = (1 << NSLayoutAttributeLeft),
    NSLayoutFormatAlignAllRight = (1 << NSLayoutAttributeRight),
    NSLayoutFormatAlignAllTop = (1 << NSLayoutAttributeTop),
    NSLayoutFormatAlignAllBottom = (1 << NSLayoutAttributeBottom),
    NSLayoutFormatAlignAllLeading = (1 << NSLayoutAttributeLeading),
    NSLayoutFormatAlignAllTrailing = (1 << NSLayoutAttributeTrailing),
    NSLayoutFormatAlignAllCenterX = (1 << NSLayoutAttributeCenterX),
    NSLayoutFormatAlignAllCenterY = (1 << NSLayoutAttributeCenterY),
    NSLayoutFormatAlignAllBaseline = (1 << NSLayoutAttributeBaseline),
    NSLayoutFormatAlignAllLastBaseline = NSLayoutFormatAlignAllBaseline,
    NSLayoutFormatAlignAllFirstBaseline NS_ENUM_AVAILABLE_IOS(8_0) = (1 << NSLayoutAttributeFirstBaseline),
    NSLayoutFormatAlignmentMask = 0xFFFF,
    /* choose only one of these three
     */
    NSLayoutFormatDirectionLeadingToTrailing = 0 << 16, // default
    NSLayoutFormatDirectionLeftToRight = 1 << 16,
    NSLayoutFormatDirectionRightToLeft = 2 << 16,  
    NSLayoutFormatDirectionMask = 0x3 << 16,  
};
metrics是自定義的一個字典,這個字典裡面的key可以寫在format字串中。編譯器解析時,自動替換為metrics字典中的value。比如:
NSDictionary * metrics = @{@"left":@5,@"right":@5,@"height":@150.0};   
NSString * format = @"|-left-[view]-right-|";
這個一看就明白的,不用這個,設置為nil。views是設置約束所有view的字典。比如:
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(view);
這個宏的作用是把view映射成字典[NSDictionary dictionaryWithObjectsAndKeys:view, @"view", nil];

VFL

蘋果開發團隊可能覺得添加單個constraint的API比較長,於是就有了VFL(Visual format language)。
上面提到的@"H:|-10-[view]-20-|",意思就是view距離superview的左邊10點,右邊20點,這樣是不是就可以確定了這個view的寬度了?
其中H:表示橫向,|表示父視圖邊緣,-10-表示10點距離,[view]表示子視圖。
下面詳細說明:
V:表示縱向
H:表示橫向
|表示父視圖邊緣
-表示距離
>=表示視圖間距、寬度或高度必須大於或等於某個值
<=表示視圖間距、寬度或高度必須小宇或等於某個值
==表示視圖間距、寬度或高度必須等於某個值
@表示>=、<=、==限制,最大為1000

示例:

|-[view]-|視圖處在父視圖的左右邊緣內|-[view]視圖處在父視圖的左邊緣|[view]視圖和父視圖左邊對齊-[view]-設置視圖的寬度高度|-30.0-[view]-30.0-|表示離父視圖 左右間距30[view(200.0)]表示視圖寬度為200.0|-[view(view1)]-[view1]-|表示視圖寬度一樣,並且在父視圖左右邊緣內V:|-[view(50.0)]視圖高度為50V:|-(==padding)-[imageView]->=0-[button]-(==padding)-|表示離父視圖的距離
Padding,這兩個視圖間距必須大於或等於0並且距離底部父視圖為padding。[wideView(>=60@700)]視圖的寬度為至少為60不能超過 700如果沒有聲明方向默認為水平H:(原文寫的V:)

代碼

UIView *view = [[UIView alloc] init];
view.backgroundColor = [UIColor brownColor];
view.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:view];

//通過宏映射成[NSDictionary dictionaryWithObjectsAndKeys:v1, @"v1", v2, @"v2", nil];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(view);
//約束1 橫向
[self.view addConstraints:
 [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[view]-20-|"
                                         options:0
                                         metrics:nil
                                           views:viewsDictionary]];
//約束2 縱向
[self.view addConstraints:
 [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-100-[view]-200-|"
                                         options:0
                                         metrics:nil
                                           views:viewsDictionary]];
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved