导航栏标题字体大小

13

我需要在我的iPhone应用程序中为一个视图控制器更改导航栏标题文本的大小。我正在使用iOS5,并尝试了以下代码:

if ([self.tabBarItem respondsToSelector:@selector(setTitleTextAttributes:)]) {
    NSLog(@"*** Support method(iOS 5): setTitleTextAttributes:");
    [self.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                [UIFont fontWithName:@"AmericanTypewriter" size:20.0f], UITextAttributeFont,
                                                [UIColor blackColor], UITextAttributeTextColor,
                                                [UIColor grayColor], UITextAttributeTextShadowColor,
                                                [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)], UITextAttributeTextShadowOffset,
                                                nil]];
}

不过这只适用于 tabBarItem。

5个回答

25
你已经掌握了,但你也可以使用以下属性方法。
对于颜色,
NSDictionary *attributes=[NSDictionary dictionaryWithObjectsAndKeys:[UIColor RedColor],UITextAttributeTextColor, nil];

self.navigationController.navigationBar.titleTextAttributes = attributes;

尺码:

NSDictionary *size = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial" size:17.0],UITextAttributeFont, nil];

self.navigationController.navigationBar.titleTextAttributes = size;

谢谢。

iOS 7及以上版本

关于大小:

NSDictionary *size = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial" size:17.0],NSFontAttributeName, nil];

self.navigationController.navigationBar.titleTextAttributes = size;

我发现当字体没有正确导入时它是无法工作的。 - Raphael Royer-Rivard

14
你需要获取导航栏属性并使用 @property(nonatomic, copy) NSDictionary *titleTextAttributes
更多信息请参见 UINavigationBar 类参考自定义 UINavigationBar 部分
为了更好地理解你的问题:你使用的是什么类型的控制器? 编辑:
[self.navigationController.navigationBar setTitleTextAttributes:...];

如果在一个已经被推出的视图控制器中访问navigationController

[navigationController.navigationBar setTitleTextAttributes:...];

如果navigationController是您当前的UINavigationController,则可以使用此代码。例如,如果您有以下代码:

UINavigationController* navigationController = ...;
[navigationController.navigationBar setTitleTextAttributes:...];

1
如果您只想让推送的视图具有不同的字体怎么办?我希望我的根视图具有标准字体大小,但是推送的视图具有较小的字体。我已经通过设置较小的字体使其正常工作,但是当我返回到根视图时,字体仍然很小,而我希望它是标准大小。 - Kevin_TA

10

自iOS7以来,我总是像以下这样做:

[[UINavigationBar appearance] setTitleTextAttributes:
    [NSDictionary dictionaryWithObjectsAndKeys:
        [UIFont fontWithName:@"Helvetica-Bold" size:18.0],NSFontAttributeName,
        nil]];

从 iOS7 开始,关键字UITextAttributeFont已被弃用,您应该使用NSFontAttributeName进行替换。

您可以使用[self.navigationController.navigationBar setTitleTextAttributes:]来设置某个导航控制器的外观,而[UINavigationBar appearance] setTitleTextAttributes:]则直接作用于整个应用程序。(当然,您需要将其放置在属性位置。)


4

Swift 2.0:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        UINavigationBar.appearance().titleTextAttributes = [
            NSFontAttributeName: UIFont(name: "DINNextLTW04-Regular", size: 20)!
        ]

        return true
    }

或者

 override func viewDidLoad() {
  super.viewDidLoad()

  self.navigationController?.navigationBarHidden =  false
  self.title = "SAMPLE"

//Set Color
  let attributes: AnyObject = [ NSForegroundColorAttributeName: UIColor.redColor()]
  self.navigationController!.navigationBar.titleTextAttributes = attributes as? [String : AnyObject]


//Set Font Size
  self.navigationController!.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "Arial", size: 37.0)!];

 }

最佳答案是这个,特别是使用appearance()函数。如果你需要改变所有的样式。 - Michał Ziobro

0

我的例子

guard let sansLightFont = UIFont(name: "OpenSans", size: 20) else { return }
navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName : sansLightFont]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接