当前位置: 首页 > 知识库问答 >
问题:

为什么我的NSLayoutConstraint没有添加?

于正志
2023-03-14

我有一个通过Interface Builder定义的布局约束视图。由于它们无法暂时停用,我决定通过拨打以下电话有选择地删除它们:

[view removeConstraint:myConstraint];

但是,之后约束仍然驻留在视图中。约束。此外,我还希望以编程方式添加约束(同样,因为我无法(取消)激活它们):

- (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。这也反映在用户界面上,它根本没有改变。

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

共有1个答案

柳培
2023-03-14

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

你需要打电话

[view addConstraint:c];

一些约束也保留在视图中。superview。约束。因此,如果要删除约束,可以尝试调用

[view.superview removeConstraints:view.constraints];

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

[view setTranslatesAutoresizingMaskIntoConstraints:NO];

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

让我知道,如果这对你有用,或者你需要更多的帮助!

 类似资料:
  • 问题内容: 我知道静态方法在类级别。因此,我知道我不需要创建实例来调用静态方法。但我也知道我可以将静态方法(如LIKE)称为实例方法。这是我感到困惑的地方,因为我期望从null对象调用静态方法(就像在调用实例方法中一样)。我真的很感谢一些解释,为什么我错了一个期望。 这是示例代码: 问题答案: 通过实例调用静态方法不需要实例存在。只要编译器能够确定变量的类型,它就可以在评估表达式并丢弃结果后静态进

  • 返回文件的URL。 starfxdemodoc.fxml为: 而StarfXDemodocController.java是这样的: 有谁能帮我一下吗? 编辑/更新: 根据james_d的评论(谢谢你James,显然我已经盯着这个问题太久了……),我修复了控制器中的明显错误,并将SimNameField设置为TextField,而不是Label(并更新了上面的代码块以反映这一点)。我还将异常处理更改

  • 默认添加的栏目为静态浏览,是不生成静态的需要在栏目中配置是否生成静态

  • 问题内容: 我刚刚安装并测试了elasticsearch,它看起来很棒,我需要知道一些东西,我有一个配置文件 在目录中 并且我插入了一个包含一个单词的文档,如果我搜索关键字, 它说什么也没找到… 在索引之前它不会干或我在配置中错过了一些东西.... 问题答案: 您的查询看起来如何? 您的配置看起来不太好。尝试:

  • 问题内容: 我有以下代码: 以及其他各种方法,例如@ Before,@ After,@ Test或@AfterClass方法。 测试在启动时不会像看起来的那样失败。有谁可以帮助我吗? 我有JUnit 4.5 该方法无法立即调用注释为@before的setUp()。类def是: 问题答案: 不要扩展TestCase并同时使用注释! 如果需要使用批注创建测试套件,请使用RunWith批注,例如: (按

  • 我目前正在做一个JavaFX突围游戏,并建立了一个移动系统,该系统使用公共的userKeyInteraction方法,在我按下左右箭头键时设置蝙蝠对象的速度。这个方法看起来工作得很好,但是我也有一个keyReleased方法,当用户不再按任何一个箭头时,这个方法不仅对bat没有影响(当键被释放时它不会停止),而且根本检测不到keyReleased事件。 正如您在上面看到的,我已经使用debug.t