代码中的视觉格式语言基础约束

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];