Ios 加载视图后的SetPartIntColor
我有一个应用程序,它在初始启动时从远程源获取配置值。其中一个值是Ios 加载视图后的SetPartIntColor,ios,Ios,我有一个应用程序,它在初始启动时从远程源获取配置值。其中一个值是navigationBartintColor 在我的视图中将出现我有: UINavigationBar *navigationBar = self.navigationController.navigationBar; [navigationBar setBarTintColor:[self UIColorFromRGB:config.navColor]]; [navigationBar setNeedsDisplay]; NSLo
navigationBar
tintColor
在我的视图中将出现
我有:
UINavigationBar *navigationBar = self.navigationController.navigationBar;
[navigationBar setBarTintColor:[self UIColorFromRGB:config.navColor]];
[navigationBar setNeedsDisplay];
NSLog( @"Color after SND: %@", config.navColor );
当应用程序启动时,将打印到控制台:
Color after SND: 39589a
Color after SND: a1231c
因此,BartinColor
是预期的蓝色
同步完成后,我手动调用视图将出现
(以及viewDidLoad
),界面中除barTintColor
之外的所有内容都会按预期进行调整。我还获得了希望打印到控制台的内容:
Color after SND: 39589a
Color after SND: a1231c
但是BartinColor保持不变,直到我关闭应用程序并再次启动它(当应用程序第二次启动时不会重新触发同步)
在视图加载后,强制更新navigationBar
tintColor
有什么想法吗
编辑:
为了明确干扰的不是UIColorFromRGB
,我进行了两项测试:
NSLog(@“UIColor结果:%@,[UIColor redColor])代码>和此:NSLog(@“UIColor结果:%@,[self-UIColorFromRGB:@“ff0000]”)代码>两者都会产生以下结果:UIColor结果:uiDeviceRbColorSpace 1 0 0 1
它将预期的消息打印到控制台,但没有改变导航栏的颜色。如果您触发导航栏颜色的更改,它将自动更改 您可以在任何操作中对此进行测试:
UINavigationBar *navBar = self.navigationController.navigationBar;
[navBar setBarTintColor: [UIColor blueColor]];
在此之前进行测试,以便知道问题出在您的方法:UIColorFromRGB(按照其他顺序,方法应以小写开头)
另一个问题是两个导航控制器嵌套 好吧,让我感到困惑的是,所有方法都按正确的顺序启动,所有其他UI元素都得到了正确的更新,所有内容都按预期打印到了控制台上,而且我遵循了我在网上找到的所有建议。我遗漏的细节是更新过程(从远程源获取配置值)发生在后台线程上,而特定的UI更改显然无法从后台线程触发。我在顶级视图控制器中创建了一个新方法:
-(void)updateBarColor
{
SFConfig *freshConfig = [[SFConfig alloc] init];
UINavigationBar *navBar = self.navigationController.navigationBar;
[navBar setBarTintColor:[self UIColorFromRGB:freshConfig.navColor]];
}
然后在接收到所需数据后使用以下命令调用它:
[viewController performSelectorOnMainThread:@selector(updateBarColor) withObject:viewController waitUntilDone:NO];
我真的不认为你应该自己调用
viewdide
和viewdideload
。什么版本的iOS?SetPartIntColor和setTintColor在不同版本上执行不同的操作。尝试调用setTintColor代替/同时调用,看看它能做什么@RobP iOS 7.0、7.1和8.1。我是出于沮丧才和他们一起玩的,但事实上,他们不是一回事barTintColor
是应用于条形图背景的内容,tintColor
是应用于导航项和条形图按钮项的内容@LordZsolt也许你是对的,但是另一种选择是将相同的代码放在它自己的方法中,并从这个位置和viewDidLoad/ViewWillExisten调用该代码。其中6个。。。我确实看到人们在互联网上说,“苹果说不要这样做”,但我在任何地方都找不到苹果真的这么说。如果你能提供一个苹果文档的链接,指出这是一个坏主意(或者是一个写得很好、研究得很好的反对它的论点),我会改变我的错误。为了证明我有一个有效的UIColor
从我自己的UIColorFromRGB
返回,我添加了以下内容:NSLog(@“UIColor after SND:%@),[self-UIColorFromRGB:config.navColor]);
最初发布时记录了以下内容:UIColor-after-SND:UIDeviceRGBColorSpace 0.223529 0.345098 0.603922 1
同步后记录此:UIColor-after-SND:UIDeviceRGBColorSpace 0.631373 0.137255 0.109804 1
,但仍然没有颜色更改。我同意它“应该”使用setPartIntColor
自动更改,但它没有。这就是我发布的原因。我不理解“你是两个嵌套的导航控制器”。你是指我的变量是navigationBar
?如果是,那现在是个问题。self.navigationController.navigationBar
有自己的作用域,而且(一时兴起)我已尝试将变量名称更改为其他名称,但没有任何影响。很抱歉,您可以在代码中将此[self-UIColorFromRGB:config.navColor]文本更改为[UIColorRedColor]?更多内容,您不需要[navigationBar setNeedsDisplay];。我制作了一个简单的应用程序,带有一个按钮和它的动作,并且只按以下行的按钮:self.navigationController.navigationBar.barTintColor=[UIColor redColor],自动更改颜色。为了找到错误:您必须执行以下操作:1.-记录导航控制器并查看其存在:NSLog(@“我的导航控制器%@),[self.navigationController description]);2.-隐藏导航栏,更改视图中的颜色后将显示。