UINavigationController清除背景颜色

时间:2014-08-12 20:42:34

标签: ios uiviewcontroller uinavigationcontroller

这个简单的例子,但不起作用;

我有一个ViewController里面的NavigationConroller,然后我想添加新的ViewConroller及其自导航控制器。

在主viewController中:

CustomViewController *vc = [[CustomViewController alloc] init];
NewNavigationVC *nav = [[NewNavigationVC alloc] initWithRootViewController:vc];

[self presentViewController:nav animated:NO completion:nil];

两个控制器的背景颜色清晰,但仍为黑色。 导航栏我可以清楚,但不是视图。

更新

如果我将self.window.backroundColor更改为红色,例如,该工作但不清楚

更新2:

[self addChildViewController:vc];  
[self.view addSubview:vc.view];
[vc didMoveToParentViewController:self];

当我想要dealloc vc时

[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];

没有导航控制器,所有工作都正常

3 个答案:

答案 0 :(得分:2)

viewController的视图的backgroundColor无法清除(如显示先前viewController在堆栈上的视图)。推送或呈现viewController会将新的viewController放在堆栈上并完全隐藏前一个viewController。

如果您想在视图上使用明确的backgroundColor,则需要:

1)将viewController设置为前一个viewController的childViewController - 然后自己设置转换动画。

2)将viewController逻辑移植到上一个viewController中,并使用新的uiview作为该视图(您还需要自己设置转换动画)。

答案 1 :(得分:2)

解决方案如下。为了清楚的例子,我们使用tableViewController:

UITableViewController *modalVC = [UITableViewController new];
UINavigationController *modalNVC = [[UINavigationController alloc] initWithRootViewController:modalVC];

UIViewController *mainVC = [UIViewController new];
UINavigationController *mainNVC = [[UINavigationController alloc] initWithRootViewController:mainVC];

modalVC.view.backgroundColor = UIColor.clearColor;
mainVC.view.backgroundColor = UIColor.redColor;
mainNVC.modalPresentationStyle = UIModalPresentationCurrentContext;
[mainNVC presentViewController:modalNVC animated:YES completion:NULL];

关键功能是您必须将presentViewController的modalPresentationStyle设置为UIModalPresentationCurrentContext

它很好但没有幻灯片动画。你会立即得到结果。 但你仍然可以通过连续呈现,解雇和再次呈现来使用“血腥”来保留视觉动画:

modalVC.view.backgroundColor = UIColor.clearColor;
mainVC.view.backgroundColor = UIColor.redColor;

[mainNVC presentViewController:modalNVC animated:YES completion:^{
    [modalNVC dismissViewControllerAnimated:NO completion:^{
        mainNVC.modalPresentationStyle = UIModalPresentationCurrentContext;
        [mainNVC presentViewController:modalNVC animated:NO completion:NULL];
    }];
}];

答案 2 :(得分:0)

您基本上需要告诉导航控制器to

navigation.modalPresentationStyle = .overCurrentContext

换句话说:

  

一种演示样式,其中内容显示在另一个视图控制器的内容上。

就是这样。

您还可以确保:

navigation.view.backgroundColor = .clear