默认情况下,iOS导航栏标题颜色似乎是白色。有没有办法将其更改为其他颜色?
我知道navigationItem.titleView
使用图像的方法。由于我的设计技能有限,并且我无法获得标准的光泽度,因此我更喜欢更改文本颜色。
任何见解将不胜感激。
默认情况下,iOS导航栏标题颜色似乎是白色。有没有办法将其更改为其他颜色?
我知道navigationItem.titleView
使用图像的方法。由于我的设计技能有限,并且我无法获得标准的光泽度,因此我更喜欢更改文本颜色。
任何见解将不胜感激。
Answers:
对于整个导航控制器,现代的方法是……加载导航控制器的根视图后,只需执行一次。
[self.navigationController.navigationBar setTitleTextAttributes:
@{NSForegroundColorAttributeName:[UIColor yellowColor]}];
但是,这在后续视图中似乎没有影响。
每个视图控制器的旧方法(这些常量适用于iOS 6,但是如果要在iOS 7外观上针对每个视图控制器执行此操作,则需要使用相同的方法,但具有不同的常量):
您需要使用一个UILabel
作为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
对我不起作用。做到了。
基于史蒂芬·费舍尔的回答,我编写了以下代码:
- (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()
]
结果是:
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字典(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的背景变为Image(例如:ABC.png)
let barMetrix = UIBarMetrics(rawValue: 0)!
self.navigationController?.navigationBar
.setBackgroundImage(UIImage(named: "ABC"), forBarMetrics: barMetrix)
3.更改导航栏标题(例如:[字体:Futura,10] [颜色:红色])
navigationController?.navigationBar.titleTextAttributes = [
NSForegroundColorAttributeName : UIColor.redColor(),
NSFontAttributeName : UIFont(name: "Futura", size: 10)!
]
(提示1:不要忘记UIFont之后的“!”标记)
(提示2:标题文本有很多属性,命令单击“ NSFontAttributeName”,您可以输入类并查看keyNames和所需的Objects类型)
希望我能帮到您!: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.
}
这是我基于史蒂文斯的解决方案
唯一真正的区别是,如果根据文本长度,我会进行一些调整位置的处理,似乎与苹果的处理方式相似
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,因为它在推动子导航栏或在标签栏上显示标题时使用。
- (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;
这在Swift中对我有用:
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};
Swift 4和4.2版本:
self.navigationController.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.green]
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];
我相信设置颜色的正确方法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;
}