【发布时间】:2014-01-02 22:46:47
【问题描述】:
我终于停止在我的应用程序中支持 iOS 5,这意味着我可以调整我所有的 NIB 以使用 NSLayoutConstraint。删除我多年来放置的所有手动布局代码真的很高兴,但我遇到了一个简单的问题,似乎应该有一个简单的答案。
这是我可以重新创建它的最简单方法: 我有一个根视图控制器和一个子视图控制器。孩子从 NIB 加载它的视图。该视图有一个单独的子视图,每边保持 20 pt 的边距,由 20 pt 的顶部、前导、尾部和底部完成。
根视图控制器有一个容器视图,可以将子视图放入其中然后移动。
在 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)。当我折叠视图时,如何让它不抱怨这个?
【问题讨论】:
-
你因为所有对孩子的提及而迷失了我。每个变量名称中都有单词 child。这里至少涉及 3 个视图,对吧?根视图、容器视图及其子视图?
-
将 IBOutlet 设置为底部约束,并在将 self.childHeightConstraint.constant 设置为 0 之前将其删除。
标签: ios objective-c nslayoutconstraint