Ios 为什么子视图控制器占据整个屏幕?

Ios 为什么子视图控制器占据整个屏幕?,ios,objective-c,uiviewcontroller,containers,childviewcontroller,Ios,Objective C,Uiviewcontroller,Containers,Childviewcontroller,我试图学习如何制作子视图控制器,并面对这个问题:我为一些未知原因制作的子视图控制器占据了整个屏幕,而不是我添加它的视图。 以下是我的超级简单代码: CVCChildViewController *childViewController = [[self storyboard] instantiateViewControllerWithIdentifier:kVCIdentifier]; [self addChildViewController:childViewController];

我试图学习如何制作子视图控制器,并面对这个问题:我为一些未知原因制作的子视图控制器占据了整个屏幕,而不是我添加它的视图。 以下是我的超级简单代码:

CVCChildViewController *childViewController =
    [[self storyboard] instantiateViewControllerWithIdentifier:kVCIdentifier];
[self addChildViewController:childViewController];
[self.childView addSubview:childViewController.view];
[childViewController didMoveToParentViewController:self];
下面是故事板屏幕:


白色UIView(childView)是self.view的子视图。并且我希望子视图控制器不跨越此子视图边界。我如何才能做到这一点?

在添加为子视图之前,请设置
childViewController.view.bounds=self.childView.bounds。
基本上,在将childViewControllers视图添加为子视图之前,需要设置其框架,否则将采用其默认高度。
我希望这有帮助。

干杯

你为什么要以编程方式这样做?在故事板中添加
容器视图
(而不是
视图
),并将
CVCChildViewController
附加到它。这应该能奏效

要访问子控制器,只需提供相应的
IBOutlet

这就是我的问题。对于子视图控制器,“从NIB调整视图大小”应取消选中。之后,它将与正确的框架。
这是因为默认情况下,此选项使viewController.view.frame等于applicationFrame

您应该使用容器视图而不是uiview。它是否仅存在于IB中?不,您也可以通过编程方式创建/访问它。请阅读有关容器视图的内容。这与我在这个问题中使用的UIView相同。那么,我的代码出了什么问题?正确设置约束。您的代码可以正常工作是的,它在IB中工作得很好,但我想学习如何以编程方式完成它-只是为了好玩。我应该在添加ChildViewController之后立即使用didMoveToParentViewController。这是第一个错误。第二,你说得对,我应该为子视图控制器设置框架。但我仍然不明白为什么子视图控制器忽略了它距IB的高度。