为什么我的NSLayoutConstraints没有添加?

时间:2015-04-09 14:06:01

标签: interface-builder autolayout nslayoutconstraint nsautolayout ios-autolayout

我有一个视图,其中包含我通过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。这也反映在完全没有改变的用户界面中。

总结说,我既不能以编程方式添加约束,也不能删除添加到故事板的约束。我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

您需要致电

[view addConstraint:c];

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

[view.superview removeConstraints:view.constraints];

此外,您需要致电(如果您还没有这样做)

[view setTranslatesAutoresizingMaskIntoConstraints:NO];

如果您需要从故事板中删除约束,您还可以考虑在代码中创建视图,如果您在故事板中没有任何特殊设置。然后您不必担心删除和添加约束。

请告诉我这是否适合您,或者您需要更多帮助!