为啥子视图控制器占据整个屏幕?
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。
【讨论】:
以上是关于为啥子视图控制器占据整个屏幕?的主要内容,如果未能解决你的问题,请参考以下文章