iOS 탐색 막대 제목 색상이 기본적으로 흰색 인 것 같습니다. 다른 색으로 바꾸는 방법이 있습니까?
navigationItem.titleView
이미지를 사용한 접근 방식을 알고 있습니다. 내 디자인 기술이 제한적이고 표준 광택을 얻지 못했기 때문에 텍스트 색상을 변경하는 것을 선호합니다.
모든 통찰력은 대단히 감사하겠습니다.
iOS 탐색 막대 제목 색상이 기본적으로 흰색 인 것 같습니다. 다른 색으로 바꾸는 방법이 있습니까?
navigationItem.titleView
이미지를 사용한 접근 방식을 알고 있습니다. 내 디자인 기술이 제한적이고 표준 광택을 얻지 못했기 때문에 텍스트 색상을 변경하는 것을 선호합니다.
모든 통찰력은 대단히 감사하겠습니다.
답변:
내비게이션 컨트롤러의 루트보기가로드 될 때 전체 내비게이션 컨트롤러에 대한 현대적인 방법입니다.
[self.navigationController.navigationBar setTitleTextAttributes:
@{NSForegroundColorAttributeName:[UIColor yellowColor]}];
그러나 이것은 후속보기에는 영향을 미치지 않습니다.
보기 컨트롤러 당 이전 방식 (이 상수는 iOS 6 용이지만 iOS 7 모양에서보기 컨트롤러별로 수행하려는 경우 동일한 접근 방법을 원하지만 다른 상수를 사용합니다) :
당신은을 사용할 필요 UILabel
는 AS titleView
의 navigationItem
.
라벨은 :
label.backgroundColor = [UIColor clearColor]
).label.font = [UIFont boldSystemFontOfSize: 20.0f]
)을 사용하십시오 .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의 답변을 읽으십시오. 내 코드는 효과를 보여 주지만 그의 코드는 기존 뷰 컨트롤러에서이를 간단하게 배치 할 수있는 방법을 제공합니다.
sizeWithFont:
하면 표준 레이블의 자동 정렬 동작이 마술처럼 적용됩니다.
나는 이것이 꽤 오래된 스레드라는 것을 알고 있지만 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]};
UITextAttributeTextColor
하십시오 NSForegroundColorAttributeName
. 매력처럼 작동합니다!
self.navigationController.navigationBar.tintColor
이 작동하지 않았습니다. 그렇습니다.
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];
self.navigationController!.navigationBar.titleTextAttributes = NSDictionary(object: UIColor.whiteColor(), forKey: NSForegroundColorAttributeName) as [NSObject : AnyObject]
self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
질문을 최신 상태로 유지하기 위해 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()
titleTextAttributes
만
페이지의 색상을 변경하려고 할 때 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 값을 조정할 수 있습니다
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]
navigationController?.navigationBar.titleTextAttributes = { if let currentAttributes = navigationController?.navigationBar.titleTextAttributes { var newAttributes = currentAttributes newAttributes[NSForegroundColorAttributeName] = navigationTintColor return newAttributes } else { return [NSForegroundColorAttributeName: navigationTintColor]}}()
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor.redColor};
소음 감소를 위해 새로운 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];
나는 색상을 설정하는 적절한 방법 UINavigationBar
은 다음과 같습니다.
NSDictionary *attributes=[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],UITextAttributeTextColor, nil];
self.titleTextAttributes = attributes;
위의 코드는에 서브 클래스로 작성되어 있으며 서브 클래스 화 UINavigationBar
없이 작동합니다.
[UINavigationBar appearance]
제목 텍스트 속성을 사용 하고 설정할 수 있다는 점에 주목할 가치가 있습니다 (서브 클래스 링 UINavigationBar
과 관련된 속임수를 선호하는 솔루션).
오리엔테이션 지원을 위해 이와 같이 사용
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];
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;
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;
}