iOS6上的Autolayout问题:“应该从引擎中删除所有依赖约束,也可以从视图的依赖约束列表中删除”

有没有人遇到过与autolayout相关的警告信息:

All dependent constraints should have been removed from the engine and also from the view's list of dependent constraints

目前,我们有一些内部有几个按钮的footerView,它们根据需要隐藏或显示.我们到处都使用完全自动布局.这是隐藏/显示此footerView的方法:

- (void)hideFooterView:(BOOL)shouldHide {

  self.containerViewBottomConstraint.constant = shouldHide ? 0 : 50; // expand  containing view to fit to full screen OR make it smaller to fit with footerView

  [UIView animateWithDuration:1 animations:^{
    [self.view layoutIfNeeded]; // animate expanding screen height to full height
    [self.footerView setAlpha:(shouldHide ? 0 : 1)];
  } completion:nil];  
}

因此,当第一次调用此方法时,则没有错误消息.但在第二次提到警告后出现在控制台中.我们不能忽略这个警告,因为在其他屏幕中我们遇到了私有Apple方法调用的崩溃,而没有任何线索如何解决这个问题:

[UILayoutContainerView nsis_shouldIntegralizeVariable:]: message sent to deallocated instance

这是另一个崩溃消息:

[UILayoutContainerView nsis_valueOfVariable:didChangeInEngine:]: message sent to deallocated instance

我无法在网上找到与“nsis_valueOfVariable:didChangeInEngine:”或“Autolayout dependent constraints”关键字相关的任何有用信息.有任何想法吗?

更新注释掉行“[self.view layoutIfNeeded]”似乎修复了问题,但之后就没有动画……

最佳答案 在我的项目中也出现了这个问题.我得到了相同的警告“所有依赖约束应该已从引擎中删除,也从视图的依赖约束列表中删除”.

正如你所说的那样,当我忽略它时,在其他屏幕上我出现了崩溃,显示出来

[UILayoutContainerView nsis_shouldIntegralizeVariable:]: message sent to deallocated instance

我发现,在我的情况下,我在调用[self.view layoutIfNeeded] – (void)viewWillDisappear:(BOOL)动画.当我删除它时,问题得到解决.
没有警告也没有崩溃.

根据我的理解,如果我们在视图被解除分配之前调用layoutIfNeeded,则会出现此警告.在下一个屏幕中,它会导致崩溃.

花了很多时间才弄明白这次事故.这就是为什么我要分享我的想法.

这可能对某人有帮助.

点赞