为啥子视图控制器占据整个屏幕?

Posted

技术标签:

【中文标题】为啥子视图控制器占据整个屏幕?【英文标题】:Why is child view controller occupies the entire screen?为什么子视图控制器占据整个屏幕? 【发布时间】:2014-05-19 07:50:15 【问题描述】:

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

CVCChildViewController *childViewController =
    [[self storyboard] instantiateViewControllerWithIdentifier:kVCIdentifier];
[self addChildViewController:childViewController];
[self.childView addSubview:childViewController.view];
[childViewController didMoveToParentViewController:self];

这里是故事板屏幕:

白色 UIView (childView) 是 self.view 的子视图。而且我希望子视图控制器不会越过这个 childView 界限。我怎么能这样做?

【问题讨论】:

你应该使用容器视图而不是uiview。 它只存在于IB吗? 不,您也可以通过编程方式创建/访问它。 了解容器视图。它与我在这个问题中使用的 UIView 相同。那么我的代码有什么问题? 正确设置约束。您的代码将起作用 【参考方案1】:

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

【讨论】:

我应该在 addChildViewController 之后使用 didMoveToParentViewController。那是第一个错误。第二个 - 你是对的,我应该为子视图控制器设置框架。但我还是不明白为什么子视图控制器忽略了它的高度。【参考方案2】:

您为什么以编程方式执行此操作?在情节提要中添加Container View(而不是View)并将您的CVCChildViewController 附加到它。这应该可以解决问题。

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

【讨论】:

是的,它在 IB 中运行良好,但我想学习如何以编程方式进行 - 只是为了好玩。【参考方案3】:

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

【讨论】:

以上是关于为啥子视图控制器占据整个屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

模态视图控制器在旋转时占据整页

表格视图的导航控制器

我怎样才能让 1 个视图控制器从底部向上滑动

单视图 IOS 7 内存泄漏

当集合视图最初占据屏幕的下半部分时,如何拉动集合视图以占据整个屏幕?

当返回导航控制器中的视图控制器时,整个屏幕为空白