我有一個應用程序在首次啓動時從遠程源獲取配置值。其中一個值是navigationBar
tintColor
加載視圖後的setBarTintColor
在我viewWillAppear
我有這樣的:
UINavigationBar *navigationBar = self.navigationController.navigationBar;
[navigationBar setBarTintColor:[self UIColorFromRGB:config.navColor]];
[navigationBar setNeedsDisplay];
NSLog(@"Color after SND: %@", config.navColor);
當應用程序啓動後,此打印到控制檯:
Color after SND: 39589a
因此,barTintColor
是預計藍色。
當同步完成時,我手動調用viewWillAppear
(以及viewDidLoad
),並且接口中除barTintColor
之外的所有內容都按預期調整。我也得到了我所期望的打印到控制檯:
Color after SND: a1231c
但barTintColor保持不變,直到我關閉應用程序,然後再次啓動它(同步未重新觸發時,應用程序啓動第二次)。
任何想法,我失蹤,以強制navigationBar
tintColor
更新後,視圖已經加載?
編輯: 明確的是,它不是UIColorFromRGB
被幹擾,我已經進行了兩次測試:
此:
NSLog(@"UIColor Result: %@", [UIColor redColor]);
這個:NSLog(@"UIColor Result: %@", [self UIColorFromRGB:@"ff0000"]);
都產生這樣的:UIColor Result: UIDeviceRGBColorSpace 1 0 0 1
我加的這樣:
if(updateBarColor) { NSLog(@「setting to red」); UINavigationBar * navigationBar = self.navigationController.navigationBar; [navigationBar setBarTintColor:[UIColor redColor]]; [navigationBar setNeedsDisplay]; }
將預期消息打印到控制檯,但沒有改變導航欄的顏色。
我真的不認爲你應該調用'viewDidAppear'和'viewDidLoad'。 – 2014-11-24 16:40:24
什麼版本的iOS? setBarTintColor和setTintColor在不同的版本上做不同的事情。嘗試調用setTintColor來代替/也看看它做了什麼! – RobP 2014-11-24 18:37:29
@RobP iOS 7.0,7.1和8.1。我和那些出於挫折的人一起玩,但實際上,他們不是一回事。 'barTintColor'是應用於酒吧背景的東西,'tintColor'是應用於導航項目和酒吧按鈕項目的東西。 https://developer.apple.com/Library/ios/documentation/UIKit/Reference/UINavigationBar_Class/index.html – 2014-11-24 18:54:05