iPhone 탐색 막대 제목 텍스트 색상
iOS 탐색 막대 제목 색상이 기본적으로 흰색 인 것 같습니다. 다른 색으로 바꾸는 방법이 있습니까?
navigationItem.titleView
이미지를 사용하는 접근 방식을 알고 있습니다. 내 디자인 기술이 제한적이고 표준 광택을 얻지 못했기 때문에 텍스트 색상을 변경하는 것을 선호합니다.
모든 통찰력은 대단히 감사하겠습니다.
현대적인 접근
내비게이션 컨트롤러의 루트 뷰가로드 될 때 전체 내비게이션 컨트롤러에 대한 현대적인 방법입니다.
[self.navigationController.navigationBar setTitleTextAttributes:
@{NSForegroundColorAttributeName:[UIColor yellowColor]}];
그러나 이것은 후속보기에는 영향을 미치지 않습니다.
고전적인 접근
보기 컨트롤러 당 옛날 방식 (이 상수는 iOS 6 용이지만 iOS 7 모양에서보기 컨트롤러마다 수행하려면 동일한 접근 방법을 원하지만 다른 상수를 원할 것입니다.
당신은을 사용할 필요 UILabel
는 AS titleView
의 navigationItem
.
라벨은 :
- 배경색이 깨끗해야합니다 (
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
'Programing' 카테고리의 다른 글
새 콘센트 연결을 삽입 할 수 없습니다 : 이름이 지정된 클래스에 대한 정보를 찾을 수 없습니다 (0) | 2020.03.22 |
---|---|
UITableview : 일부 행에 대해서는 선택을 비활성화하지만 다른 행에는 선택하지 않는 방법 (0) | 2020.03.22 |
오래되고 잘못된 프로그래밍 가정 (0) | 2020.03.22 |
안드로이드 개발을위한 좋은 ORM 툴? (0) | 2020.03.22 |
Internet Explorer 7에서 절대적으로 배치 된 부모의 백분율 너비 자식 요소 (0) | 2020.03.22 |