iOS 7 UIBarButton 뒤로 버튼 화살표 색상


172

뒤로 버튼 화살표를 변경하려고합니다.

여기에 이미지 설명을 입력하십시오

현재 다음을 사용하여 텍스트 크기와 뒤로 버튼의 텍스트 색상을 제어하고 있습니다.

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

그러나 뒤로 버튼의 화살표 색상 만 변경하려면 어떻게해야합니까?


뒤로 버튼의 화살표 색을 변경하는 솔루션을 찾았습니까?
OnkarK

1
@OMK infoinfoproperty NavBarColor를 변경하여 실제 navbarcolor를 다른 색상으로 설정했습니다. 무슨 일이 있었는지 잘 모르겠지만 솔루션이 저에게
효과적

1
일부 속성의 동작이 UINavigationBariOS 7에서 변경되었습니다 . 다른 속성 의 효과도 보려면 답변 을보십시오 .
Bhavin

답변:


438

특정 네비게이션 컨트롤러의 뒤로 버튼 셰브론 색상을 변경하려면 * :

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

* 내비게이션 컨트롤러가 2 개 이상인 앱을 사용하는 경우이 갈매기 색을 각각에 적용하려면 모양 프록시를 사용하여 다음과 같이 모든 네비게이션 컨트롤러에 대해 뒤로 버튼 갈매기 모양을 설정하십시오.

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

그리고 좋은 측정을 위해 신속하게 (댓글에서 Jay Mayu에게 감사드립니다) :

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

3
전체 앱에 동일한 탐색 컨트롤러를 사용하는 경우 전체 앱에만 적용됩니다. 나는 실제로 Bart의 제안을 추천한다.
Kyle Clegg

1
여러 탐색 컨트롤러에 대한 메모로 답변을 업데이트했습니다. 전체 앱의 색조 색상을 설정할 때 다른 부작용이 많기 때문에 Bart의 제안이 "올바른"답변이라는 데 동의하지 않습니다. 또한 원래 질문은 전체 앱의 테마를 지정하는 방법을 묻지 않았으며 뒤로 버튼의 테마를 지정하는 방법 만 묻었습니다.
DiscDev

1
이것은 뒤 셰브론의 색상을 설정하지 않는 것 같습니다.
jcampbell1

2
@ jcampbell1-여러 응용 프로그램에서 이것을 성공적으로 사용하고 있습니다 ... 아마도 여러 UINavigationController에 대한 경고를 읽지 않았을 것입니다.
DiscDev

7
스위프트를 위해UINavigationBar.appearance().tintColor = UIColor.whiteColor()
Jay Mayu

57

전체 앱의 tintColor를 설정해야합니다.

self.window.tintColor = [UIColor redColor];

또는 스위프트 3에서 :

self.window?.tintColor = UIColor.blue

출처 : iOS 7 UI 전환 안내서


4
원래 질문에 명시된 바와 같이 뒤로 버튼 셰브론 (및 전체 앱이 아닌)의 색상 만 설정하려면 잘못된 대답입니다. 정답은 여기에 내 대답을 참조하십시오 : stackoverflow.com/a/18809412/1103584
DiscDev

내 앱 델리게이트에서 이것을 사용하여 뒤로 버튼을 검은 색으로 변경했습니다. applicationDidFinishLaunchingWithOptions 메서드에 배치합니다 ... window.tintColor = [UIColor blackColor];
Marc Watson

iOS 6에서는 작동하지 않습니다. 누군가 어떻게해야하는지 알고 있습니까?
Gavjr

1
이로 인해 전체 앱의 tintColor에 영향을 미쳤으며 여기에는 모든 UIActivityViewController (공유) 및 MFMailComposeViewController (이메일 전송)가 포함됩니다. 이 대화 상자에서는 tintColor가로 수정되지 않았다고 가정하고 색상 상호 작용이 생길 수 있습니다.
Mike Lambert

커서가 깜박이는 등 다른 많은 개체의 색조 색상이 변경됩니다 UITextField. 확실히 권장하지 않습니다.
Hunter Monk

55

이 방법을 사용하여 전체 앱 탐색 막대에서 색상을 설정할 수 있습니다

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

23

이 방법으로 화살표의 색 (뒤로 단추 제목의 색이 아닌) 만 변경할 수 있습니다.

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

탐색 줄에는 화살표를 나타내는 _UINavigationBarBackIndicatorView 유형 (하위보기 배열의 마지막 항목)의 하위보기가 포함됩니다.

결과는 뒤로 버튼 화살표와 뒤로 버튼 제목의 색상이 다른 탐색 막대입니다


4
시스템 뷰의 하위 뷰 순서에 따라 나쁜 생각입니다.
Glenn Maynard

2
self.navigationController.navigationBar.tintColor를 설정할 때 작동하지 않았습니다.
Rich Fox

@GlennMaynard 당신이 옳습니다. 이것을 구현하는 가장 좋은 방법 self.navigationController.navigationBar.subviews은 뒤로 버튼을 찾을 때까지 반환되는 하위 뷰 배열을 반복하는 것 입니다.
Evan R

@ EvanR은 selmad의 솔루션이 나를 위해 일했지만 서브 뷰 배열을 반복하는 것은 효과가 없었습니다 (나는 그것이 당신에게 동의하기 때문에 먼저 시도했지만 현명하다고 생각합니다). 그것이 효과가 있다면-예를 추가하십시오. 감사.
jungledev

22

스토리 보드를 사용하는 경우 탐색 모음 색조 색상을 설정할 수 있습니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


정확히 내가 찾던 것. 감사합니다!
채드 루이스

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

2
UITextAttributeTextColor는 iOS 7에서 더 이상 사용되지 않습니다. NSForegroundColorAttributeName 사용
amergin

7

iOS 6에서 tintColor는 탐색 막대, 탭 막대, 도구 모음, 검색 막대 및 범위 막대의 배경을 채색했습니다. iOS 7에서 막대 배경을 색조하려면 barTintColor 속성을 대신 사용하십시오.

iOS 7 디자인 리소스 iOS 7 UI 전환 가이드


2
이것은 하나입니다! ... 앱 델리게이트에 넣습니다. 매력처럼 작동합니다! window.tintColor = [UIColor blackColor]; // 나는 흑인을 원했다
Marc Watson

6

tintColor버튼 (또는 막대 버튼 항목) 또는 뷰 컨트롤러의보기 에서 속성을 설정할 수 있습니다 . 기본적으로이 속성은 상위 뷰에서 색조를 UIWindow앱 의 최상위 수준까지 상속합니다 .


1
답변 주셔서 감사합니다. 그러나 iOS 7에서는 약간 다르게 작동합니다. 이전 코드는 tintColor를 사용했지만 iOS 7은 그다지 좋아하지 않는 것 같습니다. UI 문제를 해결하기 위해 공식 Apple Dev iOS 7 전환 가이드를 사용했습니다.
kevinl

이 작업을 수행하는 방법에 대한 개별 예는 내 답변을 참조하십시오. stackoverflow.com/a/18809412/1103584
DiscDev

5

나는 둘 다 사용해야했습니다.

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

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

그리고 나를 위해 일하고, 모두에게 감사합니다!


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

}

큰. 그것은 나를 도왔다. 감사합니다
Yogesh Lolusare 님이

4

스위프트 3 업데이트

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

결과: 여기에 이미지 설명을 입력하십시오


3

NavigationBar색상 을 변경하기 위해 아래와 같이 색조 색상을 설정할 수 있습니다.

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

이것은 iOS 7의 색조 색상에 영향을 미치지 않습니다. 문서에 따르면 "iOS 7에서는 모양 프록시 API를 사용하여 tintColor 속성을 설정할 수 없습니다." 링크
bachonk

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


3

전체 앱에서 Back Arrow BUT 만 변경하려면 다음을 수행하십시오.

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

앱 스토어에서 거부 될 가능성이 있습니다
Luke

@Luke, 나는 그것을 여러 번 성공적으로 사용했습니다. 거부하지 않습니다. 그러나 아직 기회는 존재합니다.
orkenstein

향후 iOS 버전에서는 여전히 고장날 가능성이 있습니다
Lope

1
@Lope, 그렇습니다. 나는 총알을 찾고 있지 않다.
orkenstein

iOS 10.1에서 하위 뷰를 반복하면 여전히 클래스 이름이지만 여기에 표시된 것처럼 모양을 설정해도 아무런 효과가 없습니다.
arlomedia

2

iOS 7에서는 파일 application:didFinishLaunchingWithOptions:에 다음 코드 줄을 넣을 수 AppDelegate.m있습니다.

[[UINavigationBar appearance] setTintColor:myColor];

myColor전체 앱에서 뒤로 버튼을 사용할 색상으로 설정하십시오 . 모든 파일에 넣을 필요는 없습니다.


0

스위프트 2.0 : 컬러링 네비게이션 바 및 버튼

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

0

스위프트 3에서 UIBarButton 뒤로 버튼 화살표 색상을 변경하려면

self.navigationController?.navigationBar.tintColor = UIColor.black
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.