0

我在顯示MFMailComposeViewController時通過調用setBackgroundImage來重置NavigationBar的背景圖像。但是當我嘗試通過在mailComposeController:didFinishWithResult:中第二次調用setBackgroundImage將圖像重置爲原始圖像時,它不會明顯更改背景圖像。UINavigationBar setBackgroundImage有時不會立即生效

奇怪的是,日誌顯示我的導航欄的背景圖片已經改變,以後我彈出了幾個視圖控制器(我不知道這是模式的轉變,哪些不是,因爲它是人其他的代碼),背景圖片終於確實更改。但爲什麼它不立即改變?

這裏是我的相關代碼中mailComposeController:didFinishWithResult:

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"img"] 
            forBarMetrics:UIBarMetricsDefault]; 
NSLog(@"Navbar img = %@", [[UINavigationBar appearance] 
          backgroundImageForBarMetrics:UIBarMetricsDefault]); 

回答

1

另一個建議是,確保你設置的背景圖像後,你已經駁回了mailComposeController和自己的視圖控制器已經變得活躍起來。

0

你確定你的-mailComposeController:didFinishWithResult:是被稱爲主線程上,你需要做的所有的UI工作的?

嘗試在主線程上執行-setBackgroundImage:forBarMetrics:調用,看看是否有幫助。

例如:

dispatch_async(dispatch_get_main_queue(), ^{ 
     [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"img"] 
             forBarMetrics:UIBarMetricsDefault]; 
    }); 
+0

感謝@Alex的幫助 - 我不確定它是否在主線程中調用,但在'mailComposeController:didFinishWithResult'中添加'dispatch_async'塊並沒有改變行爲。 – Josh

+0

@Josh 這是值得一擊:) 我看的另一個地方是確保你設置的背景圖像 - 之後,你已經解僱了mailComposeController和-after-你自己的視圖控制器已經再次變得活躍。 –

+0

這對我有效!訣竅是在調用mailComposeController的視圖控制器中的'viewWillAppear'內調用'setBackgroundImage'。你可以把它作爲答案發布,以便我可以接受它嗎? – Josh