2013-02-06 72 views
0

如何呈现UINavigationController以使其呈现的视图在背景中仍可见?半透明UINavigationController,以模态呈现

我的经验是UINavigationController会将任何东西都夹在其视图之下,因此设置UINavigationController.view.alpha将会发现固定的颜色背景,而不是呈现视图的内容。

这可以改变吗?

编辑

我不感兴趣的导航栏,但完整的内容导航控制器管理。

回答

0

如果您希望这种行为,您不能使用UINavigationController,正如您所说的导航控制器剪辑内容控制器的视图。要做你想做的事情,你应该添加一个导航条到你的视图中,并且模拟导航控制器的动作。创建类似于控制器的后退按钮this article

+1

感谢。我想了解正在发生的事情以及为什么会发生这种情况,以及为什么不能在无法更改的情况下进行更改。 (我正在研究一个现有的项目,重写navcontroller会太麻烦。) – ilmiacs

4

问题不在于UINavigationController,而在于您以模态方式呈现它。以模态方式呈现的ViewControllers永远不会透明。

您可以通过将UINavigationControllers视图添加为主UIWindow的子视图来伪造模态演示文稿。

UIViewController *viewController = [[UIViewController alloc] init]; 
    viewController.view.backgroundColor = [[UIColor greenColor] colorWithAlphaComponent:0.35]; 

    UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:viewController]; 

    [[[[UIApplication sharedApplication] delegate] window] addSubview:navCon.view]; 

当然,你将不得不自己做任何动画过渡,但应该使用动画块是微不足道的:

这个例子XCode中进行测试时,对我的作品。

+0

然后你如何删除它?我尝试了[self.view removeFromSuperview]和[self.navigationController.view removeFromSuperview],但是你不能与原始视图交互 – pathikrit

+0

您的导航控制器在您呈现之后正在发布。请记住,在UIWindow中将其视图添加为子视图将仅保留导航控制器的视图,而不是实际的导航控制器。所以你需要通过分配给伊娃,强大的财产或集合来保持它的活力。 –

1

现在有一种方法来实现这一目标使用iOS7定制的过渡,这样一来:

MyController * controller = [MyController new]; 
[controller setTransitioningDelegate:self.transitionController]; 
controller.modalPresentationStyle = UIModalPresentationCustom; 
[self controller animated:YES completion:nil]; 

创建自定义转换,你需要两件事情:

  • 一个TransitionDelegate对象(实施 <UIViewControllerTransitionDelegate>
  • 的 “AnimatedTransitioning” 对象 (实施<UIViewControllerAnimatedTransitioning>

你可以找到在本教程中自定义过渡的更多信息:http://www.doubleencore.com/2013/09/ios-7-custom-transitions/