Programing

iPhone 탐색 막대 제목 텍스트 색상

lottogame 2020. 3. 22. 10:38
반응형

iPhone 탐색 막대 제목 텍스트 색상


iOS 탐색 막대 제목 색상이 기본적으로 흰색 인 것 같습니다. 다른 색으로 바꾸는 방법이 있습니까?

navigationItem.titleView이미지를 사용하는 접근 방식을 알고 있습니다. 내 디자인 기술이 제한적이고 표준 광택을 얻지 못했기 때문에 텍스트 색상을 변경하는 것을 선호합니다.

모든 통찰력은 대단히 감사하겠습니다.


현대적인 접근

내비게이션 컨트롤러의 루트 뷰가로드 될 때 전체 내비게이션 컨트롤러에 대한 현대적인 방법입니다.

[self.navigationController.navigationBar setTitleTextAttributes:
   @{NSForegroundColorAttributeName:[UIColor yellowColor]}];

그러나 이것은 후속보기에는 영향을 미치지 않습니다.

고전적인 접근

보기 컨트롤러 당 옛날 방식 (이 상수는 iOS 6 용이지만 iOS 7 모양에서보기 컨트롤러마다 수행하려면 동일한 접근 방법을 원하지만 다른 상수를 원할 것입니다.

당신은을 사용할 필요 UILabel는 AS titleViewnavigationItem.

라벨은 :

  • 배경색이 깨끗해야합니다 ( label.backgroundColor = [UIColor clearColor]).
  • 굵은 체 20pt 시스템 글꼴 ( label.font = [UIFont boldSystemFontOfSize: 20.0f])을 사용하십시오 .
  • 50 % 알파 ( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]) 의 검은 그림자가 있습니다.
  • 당신은 중심뿐만 아니라 (에 텍스트 정렬을 설정할 수 있습니다 label.textAlignment = NSTextAlignmentCenter( UITextAlignmentCenter이전의 SDK)입니다.

라벨 텍스트 색상을 원하는 색상으로 설정하십시오. 텍스트가 그림자로 혼합되지 않는 색상을 원하므로 읽기가 어렵습니다.

나는 시행 착오를 통해 이것을 해결했지만, 내가 생각해 낸 가치는 Apple이 선택한 것이 아닌 너무 간단합니다. :)

당신이 확인하고 싶은 경우,이 코드를 드롭 initWithNibName:bundle:PageThreeViewController.m의 애플 Navbar의 샘플 . 텍스트가 노란색 레이블로 바뀝니다. 색상을 제외하고 Apple 코드에서 생성 한 원본과 구별 할 수없는 것이어야합니다.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self)
    {
        // this will appear as the title in the navigation bar
        UILabel *label = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
        label.backgroundColor = [UIColor clearColor];
        label.font = [UIFont boldSystemFontOfSize:20.0];
        label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
        label.textAlignment = NSTextAlignmentCenter;
                           // ^-Use UITextAlignmentCenter for older SDKs.
        label.textColor = [UIColor yellowColor]; // change this color
        self.navigationItem.titleView = label;
        label.text = NSLocalizedString(@"PageThreeTitle", @"");
        [label sizeToFit];
    }

    return self;
}

편집 : 또한 아래의 Erik B의 답변을 읽으십시오. 내 코드는 효과를 보여 주지만 그의 코드는 기존 뷰 컨트롤러에서이를 간단하게 배치 할 수있는 방법을 제공합니다.


나는 이것이 꽤 오래된 스레드라는 것을 알고 있지만 새로운 사용자에게는 iOS 5가 제목 속성을 설정하기 위해 새로운 속성을 제공한다는 것을 아는 것이 유용 할 것이라고 생각합니다.

UINavigationBar setTitleTextAttributes를 사용하여 글꼴, 색상, 오프셋 및 그림자 색상을 설정할 수 있습니다 .

또한 UINavigationBars응용 프로그램 전체 에서 동일한 기본 UINavigationBar의 제목 텍스트 속성을 설정할 수 있습니다 .

예를 들면 다음과 같습니다.

NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                            [UIColor whiteColor],UITextAttributeTextColor, 
                                            [UIColor blackColor], UITextAttributeTextShadowColor, 
                                            [NSValue valueWithUIOffset:UIOffsetMake(-1, 0)], UITextAttributeTextShadowOffset, nil];

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];

iOS 5에서는 다음과 같은 방법으로 navigationBar 제목 색상을 변경할 수 있습니다.

navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};

Steven Fisher의 답변을 바탕으로 다음 코드를 작성했습니다.

- (void)setTitle:(NSString *)title
{
    [super setTitle:title];
    UILabel *titleView = (UILabel *)self.navigationItem.titleView;
    if (!titleView) {
        titleView = [[UILabel alloc] initWithFrame:CGRectZero];
        titleView.backgroundColor = [UIColor clearColor];
        titleView.font = [UIFont boldSystemFontOfSize:20.0];
        titleView.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];

        titleView.textColor = [UIColor yellowColor]; // Change to desired color

        self.navigationItem.titleView = titleView;
        [titleView release];
    }
    titleView.text = title;
    [titleView sizeToFit];
}

이 코드의 장점은 프레임을 올바르게 처리하는 것 외에도 컨트롤러의 제목을 변경하면 사용자 지정 제목보기도 업데이트된다는 것입니다. 수동으로 업데이트 할 필요가 없습니다.

또 다른 큰 장점은 커스텀 타이틀 색상을 활성화하는 것이 정말 간단하다는 것입니다. 이 방법을 컨트롤러에 추가하기 만하면됩니다.


iOS 7에서 위의 제안 중 대부분은 더 이상 사용되지 않습니다.

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys: 
                               [UIColor whiteColor],NSForegroundColorAttributeName, 
                               [UIColor whiteColor],NSBackgroundColorAttributeName,nil];

self.navigationController.navigationBar.titleTextAttributes = textAttributes;
self.title = @"Title of the Page";

또한 설정할 수있는 다양한 텍스트 속성에 대한 NSAttributedString.h를 확인하십시오.


iOS 7 및 8에서는 제목의 색상을 녹색으로 변경하도록 할 수 있습니다

self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName];

질문을 최신 상태로 유지하기 위해 Alex RR 솔루션을 추가 하지만 Swift 에서는 추가하겠습니다 .

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

결과는 다음과 같습니다.

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


방법 1 , IB로 설정하십시오.

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

방법 2 , 한 줄의 코드 :

navigationController?.navigationBar.barTintColor = UIColor.blackColor()

페이지의 색상을 변경하려고 할 때 tewha의 솔루션이 잘 작동하지만 모든 페이지의 색상을 변경하고 싶습니다. 나는 페이지의 모든 페이지에서 작동하도록 약간 수정 했습니다.UINavigationController

NavigationDelegate.h

//This will change the color of the navigation bar
#import <Foundation/Foundation.h>
@interface NavigationDelegate : NSObject<UINavigationControllerDelegate> {
}
@end

NavigationDelegate.m

#import "NavigationDelegate.h"
@implementation NavigationDelegate

- (void)navigationController:(UINavigationController *)navigationController 
      willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    CGRect frame = CGRectMake(0, 0, 200, 44);//TODO: Can we get the size of the text?
    UILabel* label = [[[UILabel alloc] initWithFrame:frame] autorelease];
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:20.0];
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor yellowColor];
    //The two lines below are the only ones that have changed
    label.text=viewController.title;
    viewController.navigationItem.titleView = label;
}
@end

iOS 5부터는 titleTextAttribute Dictionary (UInavigation 컨트롤러 클래스 참조에서 사전 정의 된 사전)를 사용하여 탐색 텍스트의 제목 텍스트 색상 및 글꼴을 설정해야합니다.

 [[UINavigationBar appearance] setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIColor blackColor],UITextAttributeTextColor, 
[UIFont fontWithName:@"ArialMT" size:16.0], UITextAttributeFont,nil]];

스위프트 버전

대부분의 사람들이 Objective_C 버전의 답변을 제시했습니다.

이 기능을 필요로하는 사람이라면 Swift를 사용하여이 기능을 구현하고 싶습니다.

ViewDidload에서

1. NavigationBar 배경을 색상으로 만들려면 (예 : BLUE)

self.navigationController?.navigationBar.barTintColor = UIColor.blueColor()

2. NavigationBar 배경을 이미지로 만들려면 (예 : ABC.png)

let barMetrix = UIBarMetrics(rawValue: 0)!

self.navigationController?.navigationBar
      .setBackgroundImage(UIImage(named: "ABC"), forBarMetrics: barMetrix)

3. NavigationBar 제목을 변경하려면 (예 : [Font : Futura, 10] [Color : Red])

navigationController?.navigationBar.titleTextAttributes = [
            NSForegroundColorAttributeName : UIColor.redColor(),
            NSFontAttributeName : UIFont(name: "Futura", size: 10)!
        ]

(힌트 1 : UIFont 다음에 "!"표시를 잊지 마십시오)

(힌트 2 : 제목 텍스트의 속성이 많이 있습니다. 명령은 "NSFontAttributeName"을 클릭하십시오. 클래스를 입력하고 필요한 키 이름과 필요한 객체 유형을 볼 수 있습니다)

도와 드리겠습니다! : D


뷰 컨트롤러 viewDidLoad 또는 viewWillAppear 메서드에서 아래 코드를 사용하십시오.

- (void)viewDidLoad
{
    [super viewDidLoad];

    //I am using UIColor yellowColor for an example but you can use whatever color you like   
    self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};

    //change the title here to whatever you like
    self.title = @"Home";
    // Do any additional setup after loading the view.
}

짧고 달다.

[[[self navigationController] navigationBar] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];

이것은 Stevens를 기반으로 한 내 솔루션입니다.

텍스트 길이에 따라 위치를 조정하기 위해 약간의 핸들링을 두는 것이 유일한 차이점입니다. 애플이하는 방식과 비슷해 보입니다.

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft), 0, 480,44)];
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.font = [UIFont boldSystemFontOfSize: 20.0f];
titleLabel.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
titleLabel.textAlignment = ([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft);
titleLabel.textColor = [UIColor redColor];
titleLabel.text = self.title;
self.navigationItem.titleView = titleLabel;
[titleLabel release];

글꼴 크기에 따라 10 값을 조정할 수 있습니다


내 탐색 버튼이 텍스트를 가운데로 던지는 문제가 발생했습니다 (단 하나의 버튼 만있는 경우). 이를 해결하기 위해 프레임 크기를 다음과 같이 변경했습니다.

CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);

navigationBar의 배경 이미지와 왼쪽 버튼 항목을 사용자 정의했으며 회색 제목이 배경에 맞지 않습니다. 그런 다음 사용합니다.

[self.navigationBar setTintColor:[UIColor darkGrayColor]];

색조 색상을 회색으로 변경합니다. 그리고 제목은 이제 흰색입니다! 그것이 내가 원하는 것입니다.

도움이되기를 바랍니다 :)


self.title은 하위 탐색 표시 줄을 누르거나 탭 표시 줄에 제목을 표시 할 때 사용되므로 self.title을 설정하는 것이 좋습니다.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // create and customize title view
        self.title = NSLocalizedString(@"My Custom Title", @"");
        UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        titleLabel.text = self.title;
        titleLabel.font = [UIFont boldSystemFontOfSize:16];
        titleLabel.backgroundColor = [UIColor clearColor];
        titleLabel.textColor = [UIColor whiteColor];
        [titleLabel sizeToFit];
        self.navigationItem.titleView = titleLabel;
        [titleLabel release];
    }
}

이것은 꽤 오래된 스레드이지만 iOS 7 이상에서 탐색 막대 제목의 색상, 크기 및 세로 위치를 설정하는 것에 대한 답변을 제공한다고 생각합니다.

색상 및 크기

 NSDictionary *titleAttributes =@{
                                NSFontAttributeName :[UIFont fontWithName:@"Helvetica-Bold" size:14.0],
                                NSForegroundColorAttributeName : [UIColor whiteColor]
                                };

수직 위치

[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-10.0 forBarMetrics:UIBarMetricsDefault];

제목을 설정하고 속성 사전을 할당하십시오

[[self navigationItem] setTitle:@"CLUBHOUSE"];
self.navigationController.navigationBar.titleTextAttributes = titleAttributes;

이것은 스위프트에서 저에게 효과적입니다.

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]

self.navigationItem.title=@"Extras";
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21], NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]];

제목의 글꼴 크기를 설정하려면 다음 조건을 사용했습니다.

if ([currentTitle length]>24) msize = 10.0f;
    else if ([currentTitle length]>16) msize = 14.0f;
    else if ([currentTitle length]>12) msize = 18.0f;

소음 감소를 위해 새로운 iOS 7 텍스트 속성과 최신 목표 c를 사용하여 Alex RR의 게시물 업데이트 :

NSShadow *titleShadow = [[NSShadow alloc] init];
titleShadow.shadowColor = [UIColor blackColor];
titleShadow.shadowOffset = CGSizeMake(-1, 0);
NSDictionary *navbarTitleTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor],
                                            NSShadowAttributeName:titleShadow};

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];

오리엔테이션 지원을 위해 이와 같이 사용

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,40)];
[view setBackgroundColor:[UIColor clearColor]];
[view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ];

UILabel *nameLabel = [[UILabel alloc] init];
[nameLabel setFrame:CGRectMake(0, 0, 320, 40)];
[nameLabel setBackgroundColor:[UIColor clearColor]];
[nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin |UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin];
[nameLabel setTextColor:[UIColor whiteColor]];
[nameLabel setFont:[UIFont boldSystemFontOfSize:17]];
[nameLabel setText:titleString];
[nameLabel setTextAlignment:UITextAlignmentCenter];
[view addSubview:nameLabel];
[nameLabel release];
self.navigationItem.titleView = view;
[view release];

스위프트 4 & 4.2 버전 :

 self.navigationController.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.green]

이것은 누락 된 것 중 하나입니다. 가장 좋은 방법은 자신 만의 사용자 지정 탐색 모음을 만들고 텍스트 상자를 추가 한 다음 색상을 조작하는 것입니다.


navBar에 버튼을 삽입 할 때 움직이는 레이블의 다른 문제와 같은 문제가 발생하면 (내 경우에는 날짜가로드 될 때 버튼으로 대체하는 스피너가 있음) 위의 솔루션이 작동하지 않았습니다 나를 위해, 여기에 항상 같은 장소에서 라벨을 작동시키고 유지 한 것이 있습니다 :

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
    // this will appear as the title in the navigation bar
    //CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);
   CGRect frame = CGRectMake(0, 0, 180, 44);
    UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];



    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:20.0];
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor yellowColor];
    self.navigationItem.titleView = label;
    label.text = NSLocalizedString(@"Latest Questions", @"");
    [label sizeToFit];
}

return self;

나는 색상을 설정하는 적절한 방법 UINavigationBar은 다음과 같습니다.

NSDictionary *attributes=[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],UITextAttributeTextColor, nil];
self.titleTextAttributes = attributes;

위의 코드는에 서브 클래스로 작성되어 있으며 서브 클래스 화 UINavigationBar없이 작동합니다.


[label sizeToFit]를 호출해야합니다. 다른 단추가 탐색 모음을 차지할 때 제목보기에서 레이블이 자동으로 재배치 될 때 이상한 오프셋을 방지하기 위해 텍스트를 설정 한 후


appdelegate 파일에서이 방법을 사용할 수 있으며 모든보기에서 사용할 수 있습니다

+(UILabel *) navigationTitleLable:(NSString *)title
{
CGRect frame = CGRectMake(0, 0, 165, 44);
UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.font = NAVIGATION_TITLE_LABLE_SIZE;
label.shadowColor = [UIColor whiteColor];
label.numberOfLines = 2;
label.lineBreakMode = UILineBreakModeTailTruncation;    
label.textAlignment = UITextAlignmentCenter;
[label setShadowOffset:CGSizeMake(0,1)]; 
label.textColor = [UIColor colorWithRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1.0];

//label.text = NSLocalizedString(title, @"");

return label;
}

titleTextAttributes 막대 제목 텍스트의 속성을 표시합니다.

@property (nonatomic, copy) NSDictionary * titleTextAttributes 토론 NSString UIKit 추가 참조에 설명 된 텍스트 속성 키를 사용하여 텍스트 속성 사전에서 제목의 글꼴, 텍스트 색상, 텍스트 그림자 색상 및 텍스트 그림자 오프셋을 지정할 수 있습니다.

iOS 5.0 이상에서 사용 가능합니다. UINavigationBar.h에서 선언

참고 URL : https://stackoverflow.com/questions/599405/iphone-navigation-bar-title-text-color

반응형