请看下图了解更多。
场景是:我有五个 View Controller
每个 View 在推送时导航到下一个 View Controller
现在 MidContainerViewController 已经获得了嵌入 FirstViewController 的 Container。
MidContainerViewController 的底部是一个静态 View ,在进一步导航时不应更改。
在导航时,FirstViewController 的大小应该等于容器
当我从 FirstViewController 导航到 SecondViewController 时,它也应该是 Container 的大小。
目标 1:'FirstViewController' 和 'SecondViewController' 不应将整个屏幕与 MidContainerViewController 上的底部 View 图像重叠。
目标 2:我必须在 SecondViewController 上的最后一次“推送”时弹出到根“ View Controller ”。
解决方案:
1) 目前我已将根“ View Controller ”嵌入到 navigationController。目标 2 没有问题。它成功导航回根目录。但无法实现目标 1
2) 如果我将“第一个 View Controller ”也嵌入到 navigationController 中,目标 1 就实现了,但开始面临目标 2 的问题。它只弹出到“MidContainerViewController”。
非常感谢任何建议。
谢谢,
Best Answer-推荐答案 strong>
假设您在不使用 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 childViewControllers View 框架占据整个屏幕,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/27526084/
|