0

我有一个视图,其中包含我通过 Interface Builder 定义的布局约束。由于它们不能暂时停用,我决定通过调用有选择地删除它们:

[view removeConstraint:myConstraint];

但是,之后约束仍然存在于view.constraints. 此外,我还想以编程方式添加约束(再次,因为我不能(取消)激活它们):

- (NSLayoutConstraint*) addHeightConstraint:(int)height forView:(UIView*)view {
    NSString* v = [NSString stringWithFormat:@"V:[view(==%i)]", height];
    NSArray* cs = [NSLayoutConstraint constraintsWithVisualFormat:v options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
    NSLayoutConstraint* c = [cs objectAtIndex:0];
    c.priority = 1000;
    BOOL wasAdded = [view.constraints containsObject:c];
    return c;
}

对我的方法的任何调用都会产生NO变量的值wasAdded。这也反映在完全没有变化的用户界面中。

最后,我既不能以编程方式添加约束,也不能删除添加到情节提要的约束。我究竟做错了什么?

4

1 回答 1

1

似乎您没有将新约束添加到视图中,因此它不会在数组中。

你需要打电话

[view addConstraint:c];

一些约束也保留在view.superview.constraints. 因此,如果您想删除约束,可以尝试调用

[view.superview removeConstraints:view.constraints];

此外,您需要致电(如果您尚未致电)

[view setTranslatesAutoresizingMaskIntoConstraints:NO];

如果您需要从情节提要中删除约束,如果您在情节提要中没有任何特殊设置,您还可以考虑在代码中创建视图。这样您就不必担心删除和添加约束。

让我知道这是否适合您或您需要更多帮助!

于 2015-04-09T16:47:03.693 回答