透明背景与模态UIViewController

Mic*_*ker 20 iphone modal-dialog uiviewcontroller uiview uinavigationcontroller

我有一个困境,我想向用户呈现一个半透明的视图.

我通过实验发现,如果我只是将透明视图推到我的NavigationController堆栈的顶部,它就不会呈现我想要的透明度级别.所以我决定简单地将视图添加为堆栈顶部当前视图的子视图.

此解决方案有效,下面的视图仍然可见,并且视图是"半模态".问题是,如果父视图继承自UITableViewController(就像我的那样),那么我'推'到它的视图,不会覆盖顶部的导航栏.

我真的不希望进入这里,我不得不启用/导航栏上禁用控制每次我推这个观点时的情况,所以我想知道,如果有人知道的任何解决方案,我可以使用,这样的观点我推到UITableViewController实际上会"推过"导航栏?

pix*_*x0r 13

有趣的是,我昨天也在做同样的事情.不幸的是,这似乎是不可能的.一旦模态视图控制器就位,前一个视图就会隐藏.请参阅此主题的上一个问题.

您仍然可以使用您已设置的视图控制器和NIB文件 - 这是我的示例代码

- (void)showUpgrade {
    [self.upgradeVC viewWillAppear:NO];
    [self.view addSubview:self.upgradeVC.view];
    [self.upgradeVC viewDidAppear:NO];
}

- (void)hideUpgrade {
    [self.upgradeVC viewWillDisappear:NO];
    [self.upgradeVC.view removeFromSuperview];
    [self.upgradeVC viewDidDisappear:NO];
}

- (UpgradeViewController *)upgradeVC {
    if (_upgradeVC == nil) {
        _upgradeVC = [[UpgradeViewController alloc] initWithNibName:[NSString stringWithFormat:@"UpgradeView_%@", self.deviceType] bundle:nil];
        _upgradeVC.delegate = self;
    }
    return _upgradeVC;
}
Run Code Online (Sandbox Code Playgroud)

您需要在模态视图控制器中存储对父视图控制器的引用,以便您可以访问该-hide方法.我是通过代表做到的.

添加一些动画也很容易-show,-hide如果你想让它从屏幕底部动画起来 - 我实在是太懒了.


Dou*_*ill 13

iOS 8添加了UIModalPresentationOverFullScreen 演示风格.将其设置为呈现的视图控制器modalPresentationStyle.有关更高级的需求,请查看创建自定义演示文稿控制器.


Kir*_*lex 11

现在有一种方法可以使用iOS7自定义转换实现此目的:

MyController * controller = [MyController new];
[controller setTransitioningDelegate:self.transitionController];
controller.modalPresentationStyle = UIModalPresentationCustom;
[self controller animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

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

  • TransitionDelegate对象(实现 <UIViewControllerTransitionDelegate>)
  • 一个"AnimatedTransitioning"对象(实现<UIViewControllerAnimatedTransitioning>)

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