【问题标题】: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 相同。那么我的代码有什么问题?
  • 正确设置约束。您的代码将起作用

标签: ios objective-c uiviewcontroller containers childviewcontroller


【解决方案1】:

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

【讨论】:

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

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

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

【讨论】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多