0

我正在使用容器视图。containerView 有很多奇怪的地方。

奇怪的事情之一是视图的类型只是 UIView。那么,这个视图和所有其他子视图有什么不同呢?

然后我在阅读了一堆示例代码后开始设置。

[self.ContainerView addSubview:self.listBusinessViewController.view];// initialize'

那个时候self.listBusinessViewController已经是self的一个child。所以自己有3个孩子。

令人惊讶的是 self.listBusinessViewController.view 的框架大小仍然是我在 xib 中设置的方式,而不是自动调整到 ContainerView 的大小。

如果我这样做:

[self.ContainerView addSubview:self.listBusinessViewController.view];// initialize'
PO(NSStringFromCGRect(self.ContainerView.frame));
PO(NSStringFromCGRect(self.listBusinessViewController.view.frame));
PD(self.listBusinessViewController.view.autoresizingMask);
PD(UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight);

我有:

NSStringFromCGRect(self.ContainerView.frame): {{0, 48}, {320, 412}}
NSStringFromCGRect(self.listBusinessViewController.view.frame): {{0, 0}, {320, 480}}
self.listBusinessViewController.view.autoresizingMask: 18
UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight: 18

因此,ContainerView 的高度为 412 listBusinessViewController.view 的高度为 480 autoresizingMask 为 18,这是预期的。这意味着它具有灵活的宽度、高度和不灵活的边框。

那么为什么listBusinessViewController.view的高度没有变成412,就像它的superview一样?

当然,我可以使用霸道的方式做到这一点

CGRect frameOfAllChild = CGRectMake(0, 0, self.ContainerView.frame.size.width, self.ContainerView.frame.size.height);
for (UIViewController * child in self.childViewControllers) {
    child.view.frame=frameOfAllChild;

}

编码 ubber alles(至少 ubber xib)。但是,具有灵活高度和宽度的全部意义在于视图填充它的超级视图或它的窗口。

我错过了什么吗?

4

1 回答 1

1

将视图添加到超级视图不会更改添加的视图的框架。如果在子视图存在调整视图的大小,视图只会调整其子视图的大小。

在故事板中,容器视图可以与嵌入 segue 一起使用,以直接添加另一个视图控制器的内容。在这里,包含的视图控制器布置在与大小匹配的框架中。在 xibs 中(我必须承认,我没有使用过它们)它们只不过是帮助布局的占位符而已。在添加之前,您需要调整子视图控制器视图的框架大小。之后,调整容器大小将调整子视图的大小。

您的最终代码片段最好写为

child.view.frame = self.ContainerView.bounds;
于 2012-10-16T06:20:57.107 回答