【问题标题】:Translucent UINavigationController, presented modally半透明 UINavigationController,模态呈现
【发布时间】:2013-02-06 13:26:07
【问题描述】:

如何呈现UINavigationController 以使其呈现的视图在背景中仍然可见?

我的经验是UINavigationController 将剪切其视图下方的任何内容,因此设置UINavigationController.view.alpha 将显示固定颜色背景,而不是呈现视图的内容。

这个可以改吗?

编辑

我对导航栏不感兴趣,但对导航控制器管理的全部内容感兴趣。

【问题讨论】:

    标签: iphone ios objective-c ipad uikit


    【解决方案1】:

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

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

    在 XCode 中进行测试时,此示例适用于我:

       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];
    

    当然,您必须自己进行任何动画过渡,但使用动画块应该很简单。

    【讨论】:

    • 你如何删除它?我试过 [self.view removeFromSuperview] 和 [self.navigationController.view removeFromSuperview],但你不能与原始视图交互
    • 您的导航控制器将在您展示后发布。请记住,将其视图添加为 UIWindow 上的子视图只会保留导航控制器的视图,而不是实际的导航控制器。因此,您需要通过将其分配给 ivar、强属性或集合来保持它的活力。
    【解决方案2】:

    现在有一种方法可以使用 iOS7 自定义转换来实现这一点,这种方式:

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

    要创建自定义过渡,您需要两件事:

    • TransitionDelegate 对象(实现 <UIViewControllerTransitionDelegate>)
    • “动画过渡”对象 (实现<UIViewControllerAnimatedTransitioning>

    您可以在本教程中找到有关自定义转换的更多信息:http://www.doubleencore.com/2013/09/ios-7-custom-transitions/

    【讨论】:

      【解决方案3】:

      如果你希望这种行为你不能使用UINavigationController,正如你所说的导航控制器剪辑内容控制器的视图。要执行您想要的操作,您应该将导航栏添加到您的视图中,并模拟导航控制器的操作。要创建类似于控制器的后退按钮,请阅读this article

      【讨论】:

      • 谢谢。我试图了解正在发生的事情以及为什么会发生这种情况以及如果无法更改为什么无法更改。 (我正在做一个现有的项目,重写导航控制器太麻烦了。)
      猜你喜欢
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      相关资源
      最近更新 更多