这个简单的例子,但不起作用;
我有一个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];
没有导航控制器,所有工作都正常
答案 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