我想知道是否有可能获得通过使用可视格式语言创建的约束的指针。
举一个简单的例子,假设我为一个视图创建了一个约束数组,使它固定在它的超级视图的顶部,左侧和底部,但宽度为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];
在上面的例子中是否可以获得指向宽度约束为100.0的NSLayoutConstraint实例?
我知道我可以通过另一种方式来解决它,通过constraintWithItem分别创建宽度约束:attribute:relatedBy:toItem:attribute:multiplier:constant,但我很好奇是否有一个方法可以用纯粹的方法做到这一点VFL。
答案 0 :(得分:1)
执行此操作的一种方法是使用NSArray
&#39} - objectAtIndex:
和- indexOfObjectPassingTest:
:
NSUInteger index = [constraints indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
return ((NSLayoutConstraint *)obj).firstAttribute == NSLayoutAttributeWidth;
}];
NSLayoutConstraint *widthConstraint = [constraints objectAtIndex:index];
如果您有多个宽度约束(例如,在不同的优先级,例如),您可以更加具体地在块中进行测试。