iOS:自动布局 vs 自动调整大小掩码 - 是否可以调整整个视图以填充?

6
我有一个使用自动布局构建的故事板。在该故事板中,我嵌入了一个UIViewController子类(ButtonGridViewController)到几个不同大小的位置中。ButtonGridViewController的视图在xib中定义。
我需要的是ButtonGridViewController视图的整体缩放以适应我嵌入它的视图。在旧的struts-and-springs方法中,这很简单 - 只需设置所有子视图在两个方向上调整大小,就可以轻松完成。
如何使用约束来实现同样的效果?值得一提的是,xib只包含一个主视图,该视图为矩形,并具有4个子视图(每个都是按钮),排列成2x2网格。我希望所有内容(包括按钮和间距)都能缩放和/或拉伸以填充其进入的视图。
谢谢!

嵌入是什么意思?你是否使用容器视图? - rdelmar
在某些情况下使用容器视图;在所有其他情况下,只需实例化ButtonGridViewController并将其视图作为子视图以编程方式添加到现有的UIView中。 - DanM
如果没有不能使用容器视图的理由,那将会使事情变得更加容易。视图将自动适应容器视图。 - rdelmar
唉,我做不到。但是如果我不使用任何容器视图(即始终将视图控制器的视图作为现有uiview的子视图添加),这可能是可行的,因为这样做可以使它更一致。 - DanM
1个回答

11

如果要使用约束来完成相同的事情,您需要将上下左右四个边距都设置为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文件中。当我像上面那样通过编程方式添加约束时,我得到了同时约束并且它会破坏... - Mayur Deshmukh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接