请参阅下面的附图以获得更多理解。
场景是:我有五个 View Controller
每个 View 在推送时导航到下一个 viewController
现在 MidContainerViewController 已经得到了嵌入 FirstViewController 的容器。
MidContainerViewController 的底部是静态 View ,在进一步导航时不应更改。
在导航时 FirstViewController 的大小应该等于容器
此外,当我从 FirstViewController 导航到 SecondViewController 时,它的大小也应该是 Container。
目标 1:“FirstViewController”和“SecondViewController”不应让整个屏幕与 MidContainerViewController 上的 bottomView 图像重叠。
目标 2:我必须在最后一次“推送”SecondViewController 时弹出到根目录“View Controller”。
解决方案:
1) 目前我已经将根“View Controller”嵌入到 navigationController 中。目标 2 没问题。它成功导航回根目录。但是达不到目标1
2) 如果我也将“第一个 View Controller ”与 navigationController 一起嵌入,则目标 1 已实现,但开始面临目标 2 的问题。它只弹出“MidContainerViewController”。
非常感谢任何建议。
谢谢,
最佳答案
假设您在不使用 Storyboard的情况下手动处理推送/弹出事件,我建议您不要从 MidContainerViewController
推送 FirstViewController
。通过以下代码将下一个 View Controller 添加为 subview Controller :
FirstViewController *firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:[NSBundle mainBundle]];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:firstViewController];
[self addChildViewController:navController];
[navController.view setFrame:CGRectMake(0.0f, 0.0f, _containerView.frame.size.width, _containerView.frame.size.height)];
[_containerView addSubview:navController.view];
[navController didMoveToParentViewController:self];
通过上面的代码,您将实现您的第一个目标。在上面的代码中,FirstViewController
在其独立的导航 Controller 对象上启动,因此它将具有不同的导航堆栈。因此,如果您进一步从 FirstViewController
和 SecondViewController
插入和弹出,您的 View 将不会占据整个屏幕。但是,如果您从最后一个 View Controller 调用 popToRootViewController
,您的 Root View Controller 将是该特定容器 View 中的 FirstViewController
。
要实现第二个目标,您必须创建一个公共(public)属性以在您的 AppDelegate
类中包含对主导航 Controller 对象的引用。从该导航 Controller 对象创建您的 Root View Controller 。在最后一个 View Controller 中,您必须从 AppDelagate
类中获取该导航 Controller 属性的引用,然后从该对象调用 popToRootViewController
。
关于ios - ContainerView childViewControlllers View 框架占据整个屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27526084/