程式碼中的視覺格式語言基礎約束

HVFL 是一種旨在以簡單快速的方式約束 UI 元素的語言。通常,VFL 在 Interface Builder 中具有優於傳統 UI 自定義的優勢,因為它更具可讀性,可訪問性和緊湊性。

這是一個 VFL 的例子,其中三個 UIViews 從左到右約束,填充 superView.widthaGradeView

"H:|[bgView][`aGradeView(40)`][`bGradeView(40)`]|"

有兩個軸可以將 UI 物件限制為水平和垂直。

VFL 的每一行始終以 H:V:開頭。如果兩者都不存在,則預設選項為 H:

繼續,我們有一個管道。|這個符號或管道指的是超級檢視。如果你仔細看看上面的 VFL 程式碼片段,你會注意到其中兩個管道。

這表示超檢視的兩個水平端,外側左側和外側邊界。

接下來你會看到一些方括號,在第一組方括號內,我們有 bgView。當我們有方括號時,它指的是一個 UI 元素,現在你可能想知道我們如何在名稱和實際 UI 元素之間建立連結,也許是一個出口?

我將在帖子的最後介紹。

如果你看看第二對方括號 [aGradeView(50)],我們也有一些括號內的括號,當它存在時,它根據軸定義寬度/高度,在這種情況下,寬度為 50 畫素。

第一個方括號 [bgView] 沒有明確定義的寬度,這意味著它將儘可能地跨越。

好吧,這是基礎知識,更多是關於另一個例子中的高階內容。

例如:
StackOverflow 文件

    // 1. create views
    UIView *blueView = [[UIView alloc] init];
    blueView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:blueView];

    UIView *redView = [[UIView alloc] init];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];

    // 2. forbid Autoresizing
    blueView.translatesAutoresizingMaskIntoConstraints = NO;
    redView.translatesAutoresizingMaskIntoConstraints = NO;

    // 3. make contraints
    // horizontal
    NSArray *blueH = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[blueView]-20-|" options:NSLayoutFormatAlignAllLeft metrics:nil views:@{@"blueView" : blueView}];
    [self.view addConstraints:blueH];

    // vertical
    NSArray *blueVandRedV = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[blueView(50)]-20-[redView(==blueView)]" options:NSLayoutFormatAlignAllTrailing metrics:nil views:@{@"blueView" : blueView, @"redView" : redView}];
    [self.view addConstraints:blueVandRedV];

    NSLayoutConstraint *redW = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeWidth multiplier:0.5 constant:0];
    [self.view addConstraint:redW];