173

我正在尝试更改后退按钮箭头

在此处输入图像描述

我目前正在使用以下内容来控制文本大小以及后退按钮上的文本颜色:

[[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];

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

4

17 回答 17

439

要更改特定导航控制器的后退按钮 V 形颜色*:

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

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

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

为了更好地衡量,迅速(感谢评论中的 Jay Mayu):

UINavigationBar.appearance().tintColor = UIColor.whiteColor()
于 2013-09-15T06:08:09.783 回答
57

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

self.window.tintColor = [UIColor redColor];

或者在 Swift 3 中:

self.window?.tintColor = UIColor.blue

来源:iOS 7 UI 过渡指南

于 2013-08-28T12:12:49.417 回答
55

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions{
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
}
于 2013-09-18T22:53:30.483 回答
23

可以通过这种方式仅更改箭头的颜色(而不是后退按钮标题的颜色):

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

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

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

于 2013-09-19T11:08:32.067 回答
22

如果您使用情节提要,您可以设置导航栏的色调。

在此处输入图像描述

在此处输入图像描述

于 2015-07-27T05:28:44.670 回答
11

在初始化 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]];
于 2013-10-03T13:49:26.240 回答
7

在 iOS 6 中,tintColor 为导航栏、标签栏、工具栏、搜索栏和范围栏的背景着色。要在 iOS 7 中为条形背景着色,请改用 barTintColor 属性。

iOS 7 设计资源 iOS 7 UI 过渡指南

于 2013-09-10T09:31:45.313 回答
6

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

于 2013-08-22T15:22:34.797 回答
5
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];

}
于 2014-08-27T03:48:28.490 回答
5

我不得不同时使用:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] 
                     setTitleTextAttributes:[NSDictionary 
               dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] 
                                   forState:UIControlStateNormal];

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

为我工作,谢谢大家!

于 2013-11-14T11:33:52.473 回答
5

更新斯威夫特 3

navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.yellow
navigationController?.navigationBar.tintColor = UIColor.red
navigationController?.navigationBar.barTintColor = UIColor.gray
navigationController?.navigationBar.titleTextAttributes =  [NSForegroundColorAttributeName: UIColor.blue]

结果: 在此处输入图像描述

于 2017-11-24T18:21:41.363 回答
3

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

[[NSClassFromString(@"_UINavigationBarBackIndicatorView") appearance] 
  setTintColor:[UIColor colorWithHexString: @"#f00000"]];
于 2014-09-24T12:11:42.983 回答
3

只是要更改NavigationBar颜色,您可以设置色调颜色,如下所示。

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
于 2013-10-24T03:45:43.193 回答
3

如果您基于带有箭头图像的 UIButton 制作自定义后退按钮,这里是子类片段。使用它,您可以在代码中创建按钮,也可以将 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

于 2014-08-18T10:22:48.590 回答
2

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

[[UINavigationBar appearance] setTintColor:myColor];

设置myColor为您希望后退按钮在整个应用程序中显示的颜色。无需将其放在每个文件中。

于 2014-02-18T14:11:32.520 回答
0

Swift 2.0:着色导航栏和按钮

navigationController?.navigationBar.barTintColor = UIColor.blueColor()
navigationController?.navigationBar.tintColor = UIColor.whiteColor()
navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
于 2016-03-22T18:02:51.380 回答
0

在 swift 3 中,更改 UIBarButton 后退按钮箭头颜色

self.navigationController?.navigationBar.tintColor = UIColor.black
于 2017-05-31T06:07:14.640 回答