Objective c 为什么UIViewController的view属性不';t自动调整containerView的大小?

Objective c 为什么UIViewController的view属性不';t自动调整containerView的大小?,objective-c,uiview,subview,xcode4.5,autoresize,Objective C,Uiview,Subview,Xcode4.5,Autoresize,我正在使用containerView。containerView有很多奇怪的地方 奇怪的是,视图的类型就是UIView。那么,这个视图和其他所有子视图之间有什么不同 然后,在阅读了大量示例代码之后,我开始进行设置 [self.ContainerView addSubview:self.listBusinessViewController.view];// initialize' 当时,self.listBusinessViewController已经是self的子级。所以赛尔夫有3个孩子 令人

我正在使用containerView。containerView有很多奇怪的地方

奇怪的是,视图的类型就是UIView。那么,这个视图和其他所有子视图之间有什么不同

然后,在阅读了大量示例代码之后,我开始进行设置

[self.ContainerView addSubview:self.listBusinessViewController.view];// initialize'
当时,self.listBusinessViewController已经是self的子级。所以赛尔夫有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 自动重定尺寸任务是18,这是预期的。这意味着它具有灵活的宽度、高度和不灵活的边界

那么为什么listBusinessViewController.view的高度不像superview那样变成412呢

当然,我可以用高压的方式使用

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)。然而,拥有灵活的高度和宽度的全部目的是让视图填充它的superview或它的窗口


我遗漏了什么吗?

向superview添加视图不会更改添加视图的框架。只有在存在子视图时调整视图的大小,视图才会调整其子视图的大小

在故事板中,容器视图可以与嵌入序列一起使用,直接添加另一个视图控制器的内容。此处,包含的视图控制器在与大小匹配的框架中进行布局。在XIB中(我必须承认,在我没有使用它们的地方),它们只不过是帮助布局的占位符。在添加子视图控制器的视图之前,需要调整其框架的大小。之后,调整容器大小将调整子视图的大小

您的最后一个代码片段更好地编写为

child.view.frame = self.ContainerView.bounds;

self.ContainerView
不编译@H2CO3大概
ContainerView
是指向在xib或情节提要中添加的容器视图的出口/属性的名称。对不起。是的,特顿是对的。我想这就是使用描述性名称的地方。H2CO3,你试过编译问题代码吗?您的奉献精神给我留下了深刻的印象。@H2CO3头脑中有一个编译器,但还没有升级到使用ARC或xibs/故事板;)@jim thio我还没有尝试编译它,但我确信它不会编译,因为Cocoa(Touch)命名约定禁止将属性和方法的首字母大写。这意味着我们可以一直使用containerView designerView设计,只要我们费心告诉ChildViewController当它们出现、消失时,等等。我认为自动调整大小只是覆盖了帧大小设置。不确定PO()和PD()做什么。自动调整大小和手动设置帧大小是不兼容的选项。RTM