Ios NSLAYOUT约束在节折叠时中断

Ios NSLAYOUT约束在节折叠时中断,ios,objective-c,nslayoutconstraint,Ios,Objective C,Nslayoutconstraint,我终于停止在我的应用程序中支持iOS 5,这意味着我可以调整我的所有NIB以使用NSLayoutConstraint。删除这些年来我一直使用的所有手动布局代码真是一件乐事,但我遇到了一个简单的问题,似乎应该有一个简单的答案 下面是我可以重新创建它的最简单方法: 我有一个根视图控制器和一个子视图控制器。子对象从笔尖加载其视图。该视图有一个子视图,从每侧保持20磅的边距,由20磅的顶部、前导、尾部和底部完成 根视图控制器有一个容器视图,可以将子视图放入其中,然后四处移动 在RootViewContr

我终于停止在我的应用程序中支持iOS 5,这意味着我可以调整我的所有NIB以使用NSLayoutConstraint。删除这些年来我一直使用的所有手动布局代码真是一件乐事,但我遇到了一个简单的问题,似乎应该有一个简单的答案

下面是我可以重新创建它的最简单方法: 我有一个根视图控制器和一个子视图控制器。子对象从笔尖加载其视图。该视图有一个子视图,从每侧保持20磅的边距,由20磅的顶部、前导、尾部和底部完成

根视图控制器有一个容器视图,可以将子视图放入其中,然后四处移动

在RootViewController中:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIView *childView = self.childController.view;
    childView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.childContainerView addSubview: childView];
}
有时我会完全折叠child视图。 在RootViewController中:

- (IBAction)collapseChild:(id)sender
{
    // Adjust the height constraint on the container view
    self.childHeightConstraint.constant = 0;
    [self.view setNeedsUpdateConstraints];
}
当我这样做时,我会得到一个错误:

无法同时满足约束。 可能下面列表中至少有一个约束是您不想要的。试着这样做:(1)看看每个约束,试着找出你不期望的约束;(2) 找到添加了不需要的约束的代码,然后修复它。(注意:如果您看到不理解的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性TranslatesAutoResizingMaskToConstraints的文档)


我认为这是因为topMargin(20)+bottomMargin(20)+innerViewHeight>totalHeight(0)。当我折叠视图时,如何使它不抱怨这一点?

我找到了答案,并认为最好将其张贴在这里,以便它可以帮助其他人

问题是因为所有约束都具有所需的优先级(代码中需要UILayoutPriorityRequired或Interface Builder中需要1000)。我将Interface Builder中的优先级降低到999,应用程序现在知道,如果必须的话,可以打破这个限制


希望,这能帮助其他人在将来通过类似的迁移到我的

你把我和孩子的关系都弄丢了。每个变量名中都有child一词。这里至少有3个视图,对吗?根视图、容器视图及其子视图?在将self.childHeightConstraint.constant设置为0之前,将IBOutlet设置为底部约束,并将其删除。值得一提的是,通常只要打破底部约束,视图就会自然折叠/向上滑动。动画期间垂直折叠的部分就是这种情况。