当Section Collapsed时,NSLayoutConstraints中断

时间:2014-01-02 22:46:48

标签: ios objective-c nslayoutconstraint

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

这是我可以重新创建它的最简单方法: 我有一个根视图控制器和一个子视图控制器。孩子从NIB加载它的视图。该视图具有单个子视图,每侧保持20磅的边距,由顶部,前部,尾部和底部完成20磅。

根视图Controller有一个容器视图,可以将子视图放入然后移动。

在RootViewController中:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIView *childView = self.childController.view;
    childView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.childContainerView addSubview: childView];
}

有时候我会完全崩溃子视图。 在RootViewController中:

- (IBAction)collapseChild:(id)sender
{
    // Adjust the height constraint on the container view
    self.childHeightConstraint.constant = 0;
    [self.view setNeedsUpdateConstraints];
}

当我这样做时,我收到一个错误:

  

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

我预计这是因为topMargin(20)+ bottomMargin(20)+ innerViewHeight> totalHeight(0)。当我崩溃视图时,如何让它不抱怨?

1 个答案:

答案 0 :(得分:2)

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

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

enter image description here

希望这可以帮助将来的其他人通过类似的迁移来解决我的问题。