iOS 7 UIBarButton后退button箭头颜色

我正在尝试更改后退button箭头

在这里输入图像说明

我正在使用以下来控制文本大小以及后退button上的文本颜色:

[[UIBarButtonItem appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor], UITextAttributeTextColor, [UIFont boldSystemFontOfSize:16.0f], UITextAttributeFont, [UIColor darkGrayColor], UITextAttributeTextShadowColor, [NSValue valueWithCGSize:CGSizeMake(0.0, -1.0)], UITextAttributeTextShadowOffset, nil] forState:UIControlStateNormal]; 

但是如果我只想改变后退button的箭头颜色,我该怎么办?

更改特定导航控制器的后退buttonV形颜色*:

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

*如果您正在使用带有多个导航控制器的应用程序,并且希望将此V形字符颜色应用于每个导航控制器,则可能需要使用外观代理为每个导航控制器设置后退buttonV形button,如下所示:

 [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; 

为了好的措施,迅速(感谢Jay Mayu在评论中):

 UINavigationBar.appearance().tintColor = UIColor.whiteColor() 

你必须设置整个应用程序的tintColor。

 self.window.tintColor = [UIColor redColor]; 

或者在Swift 3中:

 self.window?.tintColor = UIColor.blue 

来源: iOS 7 UI过渡指南

您可以使用该方法在整个应用程序导航栏上设置颜色

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions{ [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; } 

这样就可以只改变箭头的颜色(不是后退button标题的颜色):

 [[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor blackColor]]; 

导航栏包含代表箭头的_UINavigationBarBackIndicatorViewtypes(子视图数组中的最后一项)的子视图。

结果是具有不同颜色的后退button箭头和后退button标题的导航栏

如果你正在使用故事板,你可以设置导航栏的色调。

在这里输入图像说明

在这里输入图像说明

在初始化navigationController的rootViewController里面,我把这段代码放在我的viewDidAppear方法里面:

 //set back button color [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal]; //set back button arrow color [self.navigationController.navigationBar setTintColor:[UIColor whiteColor]]; 

在iOS 6中,tintColor将导航栏,选项卡栏,工具栏,search栏和范围栏的背景着色。 要在iOS 7中着色条形背景,请改为使用barTintColor属性。

iOS 7devise资源iOS 7 UI过渡指南

您可以在button(或栏button项目)或视图控制器的视图上设置tintColor属性。 默认情况下,该属性将inheritance从父视图的色调,一直到应用程序的顶层UIWindow

我不得不使用两个:

 [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal]; [[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor whiteColor]]; 

并为我工作,谢谢大家!

 UINavigationBar *nbar = self.navigationController.navigationBar; if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { //iOS 7 nbar.barTintColor = [UIColor blueColor]; // bar color //or custom color //[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1]; nbar.navigationBar.translucent = NO; nbar.tintColor = [UIColor blueColor]; //bar button item color } else { //ios 4,5,6 nbar.tintColor = [UIColor whiteColor]; //or custom color //[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1]; } 

只需要改变NavigationBar颜色,你可以像下面那样设置色调。

 [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; 

如果你正在使用带有箭头图像的UIButton进行自定义后退button,这里是子类代码片段。 使用它你既可以在代码中创buildbutton,也可以将Interface Builder中的类分配给任何UIButton。 后退箭头图像将自动添加并用文本颜色进行着色。

 @interface UIImage (TintColor) - (UIImage *)imageWithOverlayColor:(UIColor *)color; @end @implementation UIImage (TintColor) - (UIImage *)imageWithOverlayColor:(UIColor *)color { CGRect rect = CGRectMake(0.0f, 0.0f, self.size.width, self.size.height); if (UIGraphicsBeginImageContextWithOptions) { CGFloat imageScale = 1.0f; if ([self respondsToSelector:@selector(scale)]) imageScale = self.scale; UIGraphicsBeginImageContextWithOptions(self.size, NO, imageScale); } else { UIGraphicsBeginImageContext(self.size); } [self drawInRect:rect]; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetBlendMode(context, kCGBlendModeSourceIn); CGContextSetFillColorWithColor(context, color.CGColor); CGContextFillRect(context, rect); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } @end #import "iOS7backButton.h" @implementation iOS7BackButton -(void)awakeFromNib { [super awakeFromNib]; BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7); UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:self.titleLabel.textColor]; [self setImage:backBtnImage forState:UIControlStateNormal]; [self setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)]; [self setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)]; } + (UIButton*) buttonWithTitle:(NSString*)btnTitle andTintColor:(UIColor*)color { BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7); UIButton *backBtn=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 30)]; UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:color]; [backBtn setImage:backBtnImage forState:UIControlStateNormal]; [backBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, is6?5:-5, 0, 0)]; [backBtn setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)]; [backBtn setTitle:btnTitle forState:UIControlStateNormal]; [backBtn setTitleColor:color /*#007aff*/ forState:UIControlStateNormal]; return backBtn; } @end 

后退按钮图像@ 2x

如果您只想更改整个应用程序的后退箭头,请执行以下操作:

 [[NSClassFromString(@"_UINavigationBarBackIndicatorView") appearance] setTintColor:[UIColor colorWithHexString: @"#f00000"]]; 

在iOS 7中,您可以将以下代码行放在application:didFinishLaunchingWithOptions:在您的AppDelegate.m文件中:

 [[UINavigationBar appearance] setTintColor:myColor]; 

myColor设置为您希望后退button在整个应用程序中的颜色。 不需要把它放在每个文件中。

Swift 2.0:着色导航栏和button

 navigationController?.navigationBar.barTintColor = UIColor.blueColor() navigationController?.navigationBar.tintColor = UIColor.whiteColor() navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()] 

在swift 3中,更改UIBarButton返回button的箭头颜色

 self.navigationController?.navigationBar.tintColor = UIColor.black