2013-02-06 140 views
6

我有一个使用自动布局构建的故事板。在该故事板中,我在几个位置嵌入了一个UIViewController子类(ButtonGridViewController),每个位置都是不同的大小。 ButtonGridViewController的视图是在xib中定义的。iOS:自动布局vs autoresizingMask - 调整整个视图的大小以填充?

我需要的是整个ButtonGridViewController的视图只是简单地填充我嵌入它的视图。使用旧的struts-and-springs方法,这很简单 - 只需设置所有子视图都可以在两个方向调整大小,瞧,小菜一碟。

如何使用约束来完成同样的事情?对于它的价值,xib只包含一个矩形的主视图,并且有4个子视图 - 每个按钮 - 以2x2网格排列。我希望包括按钮和间距在内的所有东西都能伸缩和/或伸展,以填充它正在进入的视图。

谢谢!

+0

你是什么意思嵌入?你在使用容器视图吗? – rdelmar

+0

一箱中的容器视图;在所有其他情况下,只需实例化ButtonGridViewController并以编程方式将其视图作为子视图添加到现有的UIView。 – DanM

+0

如果没有理由不能为所有人使用容器视图,那会使它容易得多。该视图将自动适应容器视图。 – rdelmar

回答

10

要完成使用需要设置的领先限制,尾随,顶部和底部的空间SuperView把同样的事情为0。见下图:

//load the ButtonGridViewController from a xib 
[[NSBundle mainBundle] loadNibNamed:@"..." owner:self options:nil]; 

//get the view add it 
[self.view addSubView:self.myGridView]; 

//turn off springs and struts 
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 

//add constraints to fill parent view 
NSArray *arr; 

//horizontal constraints 
arr = [NSLayoutConstraint constraintsWithVisualFormat:@"|[vw]|" 
               options:0 
               metrics:nil 
               views:@{@"vw":self.myGridView}]; 
[self.view addConstraints:arr]; 

//vertical constraints 
arr = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[vw]|" 
               options:0 
               metrics:nil 
                views:@{@"vw":self.myGridView}]; 
[self.view addConstraints:arr]; 
+1

相同的东西不适合我。我有相同的场景,我在我的视图中添加子视图。视图位于Storyboard中,子视图位于.xib中。当我像上面那样以编程方式添加约束时,我得到了同时约束,并且打破了...... –

相关问题