0

我不知道标题是否解释了问题本身,但在这里......

我有一个 UINavigationController,它是 UINavigationController 的 parentViewController。问题是 childViewController 的行为很奇怪,当我将它作为孩子添加时,它首先有 statusBar 的间隙(它不占据整个屏幕),如果我通过隐藏和显示导航栏来“解决”那个“错误”,差距消失了,但现在孩子不尊重我手动设置的框架。然后我试图继续,当我在孩子身上展示一个模态并解雇它时,整个孩子都消失了......

那里会有什么问题?两个容器的父子关系还是什么?

谢谢指教

编辑:这是一个显示奇怪行为的示例项目

http://www.mediafire.com/?8saa68daqfkf335

编辑2:我实际上找到了一个解决方案,但我在Apple Docs上并没有发现它很清楚,它说childViewControllers从它们所属的parentViewController中获取它的框架,但它并没有说如果parentViewController“重新出现”(比如推动它)childViewControllers 再次被 parentViewController 框架调整大小......希望这对任何人都有帮助

4

1 回答 1

0

我相信将第二个导航视图控制器呈现为模态视图控制器会更好。例如,将您当前的 presentController 选择器替换为以下内容:

- (void)presentController:(id)sender {

ChildViewController1 *cvc = [[ChildViewController1 alloc] initWithNibName:@"ChildViewController1" bundle:nil];
nc3 = [[UINavigationController alloc] initWithRootViewController:cvc];

nc3.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentViewController:nc3 animated:YES completion:nil];

UIBarButtonItem *i = [[UIBarButtonItem alloc] initWithTitle:@"X" style:UIBarButtonItemStyleBordered target:self action:@selector(close)];
cvc.navigationItem.leftBarButtonItem = i;
}

然后,您的关闭选择器可能变为:

- (void)close {
[nc3 dismissViewControllerAnimated:YES completion:nil];
}

(虽然我建议移动按钮的创建并实际在 ChildViewController1.m 中处理关闭)。

当然,这将使导航控制器的所有创建脱离 ViewController.m 的 viewDidLoad 选择器:

- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor blueColor];

UIButton *b = [UIButton buttonWithType:UIButtonTypeRoundedRect];
b.frame = CGRectMake(0, 100, 100, 40);
[b setTitle:@"present" forState:UIControlStateNormal];
[b addTarget:self action:@selector(presentController:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:b];
}

希望它有效!

于 2013-03-22T15:55:18.590 回答