2

我試圖找到一種方法來爲我的應用程序中的不同導航欄設置不同的背景顏色(每個導航欄都有幾個視圖)。我不想重寫drawRect:因爲這適用於整個應用程序的全局。此外,使用tintcolor屬性不起作用,因爲它僅適用於導航欄項目。如何更改uinavigationbar背景顏色,而不會覆蓋drawRect:

self.navigationController.navigationBar.tintColor = [UIColor greenColor]; 

我一直在Google上搜尋幾天,找不到解決此問題的直接解決方案。怎麼這麼簡單這麼難?不明白爲什麼它不是uinavbar的屬性...

有人請幫助一個簡單的解決方案...謝謝!

回答

1

子類UINavigationBar並覆蓋drawRect,然後僅在需要不同顏色的地方使用子類。 (當你初始化子類時,你可以有一種方法讓你傳遞顏色,或者如果你需要很多不同的顏色)。

+1

我應該在哪裏做?在每個視圖控制器下? – TommyG

+0

在iOS7中覆蓋drawRect會導致一些問題。請參閱:http://stackoverflow.com/questions/19523432/drawing-in-custom-uinavigationbar-attached-to-top –

1

當你說self.navBar setTintColor:[UIColor greenColor]];在每個視圖的viewDidLoad中。作爲一個IBOutlet UINavigationBar的鏈接導航欄在Interface Builder

+0

不想改變圖像 - 但顏色。我怎樣才能將這個顏色應用? – TommyG

+0

順便說一句,沒有像.contents這樣的東西.... – TommyG

+0

首先,我不使用IB。其次,當我寫它時,它只會改變導航欄項目的顏色。通常TintColor只是爲了修改導航欄項目的顏色。這正是我的問題,如上所述。 – TommyG

6
#import <QuartzCore/QuartzCore.h> 

self.navigationController.navigationBar.layer.contents = (id)[UIImage imageNamed:@"navigationBarBackgroundImage"].CGImage; 

self.navigationController.navigationBar.tintColor = [UIColor orangeColor]; 

你抱怨之前沒有任何內容的屬性,其中導航欄聲明。您需要導入石英框架

+0

但我不想使用圖像...我如何設置背景顏色沒有圖像和具有不同的顏色的項目? – TommyG

+0

確實地說,你在查看代碼之前是否嘗試了我的代碼。這是設置navigationBar的色彩顏色的方法。首先嚐試這個代碼,並檢查你是否得到orangeColor或greenColor? –

+0

也self.navigationController.navigationBar.layer.contents =(id)[UIImage imageNamed:@「navigationBarBackgroundImage」]。CGImage; 不編譯 - 看起來像一個鑄造錯誤。 – TommyG

0

您擁有的代碼是正確的。你需要把它放在創建導航控制器的地方。

1
self.navigationController.navigationBar.backgroundColor = [UIColor greenColor]; 
self.navigationController.navigationBar.tintColor = [UIColor greenColor]; 

正在爲我工​​作,非常簡單的方法。