指向视觉格式语言 (VFL) 约束的指针?

Pointer to Visual Format Language (VFL) Constraint?

我想知道是否可以获得指向通过使用可视化格式语言创建的约束的指针。

举一个简单的例子,假设我已经为一个视图创建了一个约束数组,它固定在它的超级视图的顶部、左侧和底部,但宽度为 100,我想获得指向此宽度限制的指针,以便稍后以编程方式更改它。

VFL 的内容大致如下:

UIView *insertedView = [[UIView alloc] init];
insertedView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview: insertedView];

NSDictionary *views = NSDictionaryOfVariableBindings(insertedView);
NSDictionary *metrics = @{ @"viewWidth" : @(100.0) };

NSArray *constraintsH = [NSLayoutConstraint constraintsWithVisualFormat:@"|[insertedView(viewWidth)" options:0 metrics:metrics views:views];

NSArray *constraintsV = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[insertedView]|" options:0 metrics:nil views:views];

[self.view addConstraints: constraintsH];
[self.view addConstraints: constraintsV];

上面例子中是否可以获取NSLayoutConstraint实例指向100.0的宽度约束?

我知道我可以用另一种方法来解决它,通过 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant 单独创建宽度约束,但我很好奇是否有一种方法可以用纯 VFL 来做到这一点。

一种方法是使用 NSArray- objectAtIndex:- indexOfObjectPassingTest::

NSUInteger index = [constraints indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    return ((NSLayoutConstraint *)obj).firstAttribute == NSLayoutAttributeWidth;
}];

NSLayoutConstraint *widthConstraint = [constraints objectAtIndex:index];

如果您有多个宽度限制(例如,在不同的优先级),您可以让块中的测试更具体。