簡體   English   中英

當應用程序在后台運行時,iOS 7.x上的UINavigationController推送/彈出錯誤

[英]UINavigationController push / pop bug on iOS 7.x when app is running in the background

我已經將UINavigationController設置為mainWindow的rootViewController。

我從代碼中推送和彈出viewcontrollers(因此,推送和彈出不會由用戶交互觸發)。

當我在應用程序處於前台時執行此操作時,一切都會按預期進行。

但是當我在后台運行應用程序時執行此操作時,未顯示正確的ViewController。

僅在iOS 7.x上可重現此問題。

在此鏈接下可以找到一個示例項目: https : //www.dropbox.com/sh/pmxnpgtrjxwehs7/_l3NW4xllf

要重現該問題,只需將應用程序置於后台並等待12秒鍾,然后將應用程序返回至前台:當您使用UINavigationBar的后退按鈕進行導航時,未顯示navigationController的rootView(應如此):背景仍然為綠色,而不是黃色(navigationController的rootViewController的背景是黃色)。

當應用程序處於前台時,點擊帶有標簽“ 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];
        });
    });
});

您知道如何解決這個問題嗎?

提前致謝!

我找到了一個解決方案:我使用此處發布的代碼實現了相同的導航動畫: stackoverflow.com/questions/9480458/change-animation-transition 使用該代碼無法重現該問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM