当应用程序在后台运行时,iOS 7.x上的UINavigationController推送/弹出错误

时间:2014-03-24 09:42:00

标签: ios uinavigationcontroller pushviewcontroller poptoviewcontroller

我已经将UINavigationController设置为mainWindow的rootViewController。

我从代码中推送和弹出viewcontrollers(因此推送和弹出不会被用户交互触发)。

当我在应用程序处于前台时这样做时,每个人都应该按原样运行。

但是当我在后台运行应用程序时,不会显示正确的ViewController。

此问题仅在iOS 7.x上可重现。

可在此链接下找到示例项目:https://www.dropbox.com/sh/pmxnpgtrjxwehs7/_l3NW4xllf

要重现此问题,只需将应用程序置于后台并等待12秒并将应用程序返回到前台:当您使用UINavigationBar的后退按钮进行导航时,不会显示navigationController的rootView(因为它应该):背景仍然是绿色,而不是黄色(navigationController的rootViewController' s背景是黄色)。

当应用程序位于前台时,点击带有标签" aaaaa"执行相同的导航,但完成后,GUI处于正确的状态。

简而言之: 当应用程序位于前台但当应用程序在后台时不起作用时,此方法有效:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    NSLog(@"pushViewController!");
    [self pushViewController:[[BViewController alloc] init] animated:YES];

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self popToRootViewControllerAnimated:YES];

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self pushViewController:[[BViewController alloc] init] animated:YES];
        });
    });
});

你知道如何解决这个问题吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案:我使用此处发布的代码实现了相同的导航动画:stackoverflow.com/questions/9480458/change-animation-transition。使用该代码无法重现该问题!