2013-11-22 82 views
12

在appDidFinishLaunchingWithOptions上,我使用以下代碼將我的整個應用程序染成紅色。真的很奇怪的應用程序的顏色行爲?

self.window.tintColor = [UIColor otfRedColor]; 

這很好,當我的應用程序加載時,所有的導航欄項目都是紅色的。 A是我的根視圖控制器。

我有3個視圖控制器,a,b和c。 A拉起b的模態演示視圖表,拉出c的完整模態視圖。當C被拉起時,導航欄上的酒吧按鈕項全部呈灰色,這不應該發生,因爲我沒有在應用程序代表着色窗後以任何方式更改任何色調或顏色。然後我使用

[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

解散VC c和b,但現在我的整個應用程序被染成灰色。自應用程序委託之後,我一直沒有使用任何色調代碼,爲什麼會發生這種情況?當我再次從A到B時,那個導航欄的項目仍然是紅色的?

代碼從上拉視圖控制器B:

AthleteAdd *addAthlete = [self.storyboard instantiateViewControllerWithIdentifier:@"addAthlete"]; 
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addAthlete]; 
addAthlete.delegate = self; 
navigationController.modalPresentationStyle = UIModalPresentationFormSheet; 
[self presentViewController:navigationController animated:YES completion:nil]; 

守則的B拉起C:

MedicalReleaseVC *medRelease = [self.storyboard instantiateViewControllerWithIdentifier:@"showMedRel"]; 
    medRelease.delegate = self; 
    [self presentViewController:medRelease animated:YES completion:nil]; 

有誰知道爲什麼會這樣,還是有一個想法?我嘗試着將第三個視圖控制器設置爲紅色3種不同的方式,它仍然保持灰色,然後當一切都解散時,我的整個應用程序是灰色的。請幫忙!!

編輯:

如果有幫助,我解決了這個問題的方法是通過設置在我appdelegate.m以下

self.window.tintAdjustmentMode = UIViewTintAdjustmentModeNormal; 

回答

10

我認爲這是iOS7在處理tintAdjustmentMode錯誤時打開並關閉牀單和彈出。我已經看到這個錯誤發生在Apple的本地郵件應用程序中,其中條形按鈕項變爲灰色,或者相反,一旦彈出窗口出現,它們不再變爲灰色。

爲了進一步調試,我建議對您的一個視圖(或直接窗口)進行子類化並實施tintColorDidChange。在那裏記錄tintAdjustmentMode的值。我擔心這是什麼導致你的灰色色調問題。

一種解決方案是強制UIViewTintAdjustmentModeNormal,但這會在打開彈出窗口或工作表時產生調光效果。

+0

你能舉例說明UIViewTintAdjustmentModeNormal好嗎? –

+0

我不知道100%,因爲我沒有處理這樣的問題,但我認爲如果您將其設置爲UIViewTintAdjustmentModeNormal而不是UIViewTintAdjustmentModeAutomatic,它將不會從正常狀態切換爲暗灰色。所以你理論上可以在窗口中做到這一點。 –

+2

我設置了self.window.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;在我的應用程序代表中,修復了所有灰色調,並且不知何故,我的模態視圖仍然使背景變暗。不知道它爲什麼會起作用,但不會去爭取一件好事! –

1

只要把

self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal; 

在viewDidLoad中和你的顏色恢復正常。

+0

我把它放在我的醫學發佈課上,但是當它被解僱時,一切都是灰色的。 –

0

肯定有一個錯誤。我注意到,當彈出窗口顯示窗口變暗時,但手動更改keyWindow.tintAdjustmentMode後(對於自定義視圖&模式視圖控制器),即使將keyWindow.tintAdjustmentMode設置回自動,彈出窗口也將停止調暗。

3

我只好把

[[[UIApplication sharedApplication] keyWindow] setTintAdjustmentMode:UIViewTintAdjustmentModeNormal]; 

在我viewDidLoad來解決這個問題。但正如在其他答案中提到的那樣,當彈出窗口彈起時,它不會減弱酒吧按鈕項目的不利影響。

0

當顯示彈出窗口時,主視圖的TintAdjustmentMode設置爲Dimmed。這應該在彈出窗口關閉時反轉,但是當您從彈出窗口導航到新的屏幕時,由於某種原因它不會發生。

我在顯示爲彈出窗口的UIViewController中解決了這個問題 - 重寫ViewWillDisappear方法並將主視圖控制器的視圖上的TintAdjustmentMode設置回Normal。 (在Xamarin中,我使用了UIApplication.SharedApplication.KeyWindow.RootViewController.View.TintAdjustmentMode = UIViewTintAdjustmentMode.Normal以及一些檢查中的空值)

0

另一種解決方案是不設置窗口tintColor,而是在適當的地方使用外觀代理並在其他地方以編程方式設置tintColor(或在Interface Builder中) 。這似乎比設置全局窗口tintColor更安全,這會引發奇怪的行爲,特別是在模態,系統警報和操作表關閉後。

刪除此:

self.window?.tintColor = UIColor.redColor() 

添加這些:

UINavigationBar.appearance().barTintColor = UIColor.redColor() 
UINavigationBar.appearance().tintColor = UIColor.whiteColor() 
UISegmentedControl.appearance().tintColor = UIColor.orangeColor()