呈现ViewController会破坏之前的ViewController

时间:2014-03-03 11:11:06

标签: ios uiviewcontroller presentviewcontroller

我的问题是当我提出UIViewController呈现视图变黑时。

我有一个名为UIViewController的{​​{1}},这是我的窗口的根视图。 我有一个mainViewController(刚刚添加为mainViewController视图的子视图)。

MMDrawerController包含我的其余观点。

但是当我从我的MMDrawerController中呈现新的UIViewController时,新的VC显示效果很好,但是当它解散时,它只会留下黑屏。 注意添加时会出现黑屏(我可以直接看到)。不是在解雇时。

出于测试目的,我做了这段代码:

mainViewController

与正常使用相同的黑色结果。 (通常是UIViewController *vc = [UIViewController new]; vc.view.backgroundColor = [UIColor redColor]; [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:vc animated:NO completion:^{ [vc dismissViewControllerAnimated:YES completion:nil]; }]; ...)

我的mainViewController设置如下:

QLViewController

Souce code of MMDrawerController在我的项目中是最新的

2 个答案:

答案 0 :(得分:1)

我已经在MMDrawerController示例项目中测试了代码,但我无法重现该问题,以下是我的尝试:

MMAppDelegate.m

-(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    //...

    UIViewController *testVc = [[UIViewController alloc] init];
    testVc.view.backgroundColor = [UIColor greenColor];
    [testVc.view addSubview:self.drawerController.view];

    [self.window setRootViewController:testVc];
    [self.window addSubview:testVc.view];

    return YES;
}

MMExampleSideDrawerViewController.m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch (indexPath.section) {
        case MMDrawerSectionViewSelection:{
            UIViewController *vc = [UIViewController new];
            vc.view.backgroundColor  = [UIColor redColor];
            UIViewController *mainVC =  [[UIApplication sharedApplication] keyWindow].rootViewController;
            [mainVC presentViewController:vc animated:YES completion:^{
                [vc dismissViewControllerAnimated:YES completion:nil];
            }];

            return;
    //...
}

MMExampleCenterTableViewController.m:

-(void)doubleTap:(UITapGestureRecognizer*)gesture{
    UIViewController *vc = [UIViewController new];
    vc.view.backgroundColor  = [UIColor redColor];
    UIViewController *mainVC =  [[UIApplication sharedApplication] keyWindow].rootViewController;
    [mainVC presentViewController:vc animated:YES completion:^{
        [vc dismissViewControllerAnimated:YES completion:nil];
    }];

    return;

    [self.mm_drawerController bouncePreviewForDrawerSide:MMDrawerSideLeft completion:nil];
}

答案 1 :(得分:0)

最后,问题是我在 mainViewController 上应用了插入约束。

在场景后面,我认为方法presentViewController:animated:completion:使用的是框架而不是AutoLayout,这会破坏 mainViewController UIView的{​​{1}}。< / p>

感谢@simalone,我使用相同的方法找到问题的根源(使用UIViewController示例项目)。

我想测试自己的问题,I uploaded the example project with the issue这样你就可以理解它了。 线上有一个断点,它是bug的起源。 然后双击视图。

再次感谢@simalone。干杯!