删除视图时,约束会发生什么

Sul*_*han 106 ios autolayout nslayoutconstraint

我的问题很简单,但我在文档中找不到任何信息.

从视图层次结构中删除视图(或移动到另一个视图)时,布局约束会发生什么?

例如,让我们容器C与子视图AB.容器C有一些约束.然后我们打电话[A removeFromSuperview].约束会发生什么A

那么如果我们增加会发生什么AC着?

rde*_*mar 114

约束被删除.如果再次添加A,则必须为其创建新约束,或者如果在删除A之前保存约束,则可以将其添加回来.当我做这样的事情时,我为这个名为view1的视图保存了这样的约束:

self.portraitConstraints = [NSMutableArray new];
for (NSLayoutConstraint *con in self.view.constraints) {
    if (con.firstItem == self.view1 || con.secondItem == self.view1) {
       [self.portraitConstraints addObject:con];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 可以在文档中的某处找到这个事实吗?我相信你,但似乎很奇怪,这个事实在任何地方都没有提到. (7认同)
  • 虽然这个答案看起来很明显,但它仍然非常有用! (5认同)
  • @Firo,我确定他们应该被删除,所以如果他们不在iOS 6中,那可能就是一个bug.BTW,removeFromSuperview方法的文档说,"调用此方法将删除任何引用您要删除的视图的约束,或者引用您要删除的视图的子树中的任何视图". (4认同)
  • 通常将约束与视图一起删除。如果不是,布局系统将如何在以后的评估中对其进行评估? (2认同)

Eva*_*one 38

由于我也有这个问题,我检查了Apple Docs只是为了解决问题,结果证明已经删除了约束条件.

UIView removeFromSuperview方法的文档说明:

调用此方法将删除引用要删除的视图的任何约束,或者引用要删除的视图的子树中的任何视图.

我不确定这是在去年发布原始问题时是否记录在案,但我只是想我会分享这些信息,以防有人需要它...