UINavigationController全局和以编程方式更改导航栏色调颜色

时间:2012-02-23 20:09:15

标签: objective-c ios colors uinavigationcontroller storyboard

此代码可以在应用程序中的任何位置更改UINavigationBar的颜色。但是,我注意到它不会更改 UIColor使用的UINavigationBar的{​​{1}}(我来自UINavigationController)。

UIStoryboard

有没有办法访问UIColor* navBarColor = [UIColor colorWithRed:arc4random()%100/100.0 green:arc4random()%100/100.0 blue:arc4random()%100/100.0 alpha:1]; [[UINavigationBar appearance] setTintColor:navBarColor]; [[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent]; [[UINavigationBar appearance] setAlpha:0.7]; 导航栏的appearance对象?我知道如何设置各个控件的色调,但我希望有一个全局控制他们的外表。

更新: 这是我的错误,代码确实改变了所有UINavigationController's的{​​{1}},但是它需要覆盖和覆盖根导航控制器(例如呈现模态视图控制器),然后它将重新用新的UIColor绘制自己!

谢谢!

4 个答案:

答案 0 :(得分:17)

现在在iOS 8中,我们可以通过以下方式设置色彩: -

self.navigationController.navigationBar.barTintColor = [UIColor redColor];

答案 1 :(得分:14)

当您声明UINavigationController时,请尝试以下操作:

UINavigationController *myNavController = 
[[UINavigationController alloc] initWithRootViewController:myRootViewController];
myNavController.navigationBar.tintColor = 
    [UIColor colorWithRed:arc4random() % 100 / 100.0f
                    green:arc4random() % 100 / 100.0f
                     blue:arc4random() % 100 / 100.0f
                    alpha:1.0f];

答案 2 :(得分:13)

您可以使用appearance代理全局更改条形颜色:

NSDictionary *textTitleOptions = 
[NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], 
                                           UITextAttributeTextColor, 
                                           [UIColor whiteColor],  
                                           UITextAttributeTextShadowColor, nil];

[[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions];
textTitleOptions = 
 [NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], 
                                            UITextAttributeTextColor, nil];
[[UINavigationBar appearance] setTintColor:[UIColor redColor]];
[[UIToolbar appearance] setTintColor:[UIColor redColor]];
[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]];

答案 3 :(得分:4)

可以在此处找到完整的解决方案,该解决方案可立即更改导航栏颜色并记住后续启动的首选项: iPhone iOS how to redraw UINavigationBar on demand?