我有一个应用程序在首次启动时从远程源获取配置值。其中一个值是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