了解 iOS Objective C 中的视觉格式约束

Posted

技术标签:

【中文标题】了解 iOS Objective C 中的视觉格式约束【英文标题】:Understanding visual format constraints in iOS Objective C 【发布时间】:2017-11-20 11:19:18 【问题描述】:

我知道在 InterfaceBuilder ex 中设置约束。前导、尾随、顶部、底部、固定宽度等。 我找到了一些约束代码,我不知道这段代码试图设置哪个约束,下面的视觉格式约束到底是什么意思?

  NSDictionary *binding = @@"v" : self.view;
    NSDictionary *metrics = @@"height" : @(self.height);
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[v]|" options:0 metrics:nil views:binding]];
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[v(==height)]|" options:0 metrics:metrics views:binding]];

【问题讨论】:

看这里developer.apple.com/library/content/documentation/… 在该文档cmd +f“v”上。没结果。你能告诉我什么是“v”和“height”吗? 以下网站将为您提供帮助。 autolayoutconstraints.com 不要再坚持使用 VFL VFL 不能考虑安全区域布局指南,它只能考虑***布局指南。你可以编写完美的 VFL 来搞砸你在 iPhoneX 中的 UI 有很多令人信服的论点来避免在 ios 开发的这个阶段使用 VFL。正如@SandeepBhandari 提到的那样,不能使用安全区域布局指南。也极容易出现开发人员错误。如果您想了解现有的约束,我希望将它们转换为基于锚的。如果你想创建新的约束,我建议改为基于锚。 【参考方案1】:

H:|[v]|

H 表示约束是水平添加的,类似地V 是垂直添加的。

| 表示绑定字典所指示的超级视图。 NSDictionary *binding

[v] 代表视图本身。

所以H:|[v]| 解析为具有0 常量的前导和尾随约束。

V:[v(==高度)]|

与此类似,视图被赋予一个底部约束和一个高度约束,并带有常量height,如NSDictionary *metrics 中所述。

更多信息请参考https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/VisualFormatLanguage.html

【讨论】:

对于H,左|是指前导,同样对于V,左|是指上,右|是指下。 明白了,很好的解释! 你也可以answer this吗?【参考方案2】:

正如 GoodSp33d 向我建议的那样。

你的约束是-

(1) leading & trailingself.view0 我已将上述约束转换为不同的方式

(2) ContentView 的底部 分配给 self.view

(3)固定高度限制

以另一种形式约束-

    [self.contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor].active = YES;
    [self.contentView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor].active = YES;
    [self.contentView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor].active = YES;


    NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.view
                                                                        attribute:NSLayoutAttributeHeight
                                                                        relatedBy:NSLayoutRelationEqual
                                                                           toItem:nil
                                                                        attribute:NSLayoutAttributeNotAnAttribute
                                                                       multiplier:1.0
                                                                         constant:self.height];
    [self.view addConstraint:heightConstraint];

【讨论】:

以上是关于了解 iOS Objective C 中的视觉格式约束的主要内容,如果未能解决你的问题,请参考以下文章

格式为 00:00:00 的 iOS 数组字符串到格式为 00.00.00 的数组浮点型 Objective C

如何解析数据,如果它是Objective c中的`isKindOfClass([NSString] class)`

Objective C / IOS5 - 根视图 - 从空应用程序模板构建 (XCODE)

uiimage到Objective C中的XBM格式

Objective-C iOS应用程序中的C风格函数[关闭]

如何从 Objective C、iOS 中的 NSUserDefaults 获取准确数据?