为什么我的 NSLayoutConstraints 没有被添加?
Why are my NSLayoutConstraints not added?
我有一个视图,其中包含我通过 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;
}
我的方法的任何调用都会导致变量 wasAdded
的值 NO
。这也反映在用户界面上,它根本没有改变。
最后,我既不能以编程方式添加约束,也不能删除添加到情节提要中的约束。我做错了什么?
您似乎没有向视图添加新约束,因此它不会在数组中。
您需要致电
[view addConstraint:c];
一些约束也保留在 view.superview.constraints
中。所以如果你想删除约束,你可以尝试调用
[view.superview removeConstraints:view.constraints];
此外,您需要致电(如果您尚未致电)
[view setTranslatesAutoresizingMaskIntoConstraints:NO];
如果您需要从情节提要中删除约束,您还可以考虑在代码中创建视图,前提是您在情节提要中没有任何特殊设置。那么您就无需担心删除和添加约束。
让我知道这是否适合您,或者您需要更多帮助!
我有一个视图,其中包含我通过 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;
}
我的方法的任何调用都会导致变量 wasAdded
的值 NO
。这也反映在用户界面上,它根本没有改变。
最后,我既不能以编程方式添加约束,也不能删除添加到情节提要中的约束。我做错了什么?
您似乎没有向视图添加新约束,因此它不会在数组中。
您需要致电
[view addConstraint:c];
一些约束也保留在 view.superview.constraints
中。所以如果你想删除约束,你可以尝试调用
[view.superview removeConstraints:view.constraints];
此外,您需要致电(如果您尚未致电)
[view setTranslatesAutoresizingMaskIntoConstraints:NO];
如果您需要从情节提要中删除约束,您还可以考虑在代码中创建视图,前提是您在情节提要中没有任何特殊设置。那么您就无需担心删除和添加约束。
让我知道这是否适合您,或者您需要更多帮助!