更改 UINavigationController 标题的字体

Posted

技术标签:

【中文标题】更改 UINavigationController 标题的字体【英文标题】:Change font of UINavigationController title 【发布时间】:2011-05-02 20:37:03 【问题描述】:

我可以更改 UINavigationController 的字体吗? --> 标题

【问题讨论】:

【参考方案1】:

标题视图可以是任何视图。因此,只需创建一个 UILabel 或其他更改字体并将新视图分配给导航项的标题属性的东西。

【讨论】:

这是个好主意,但我现在有一个问题,.. 当我添加我的 UILabel 时,我在 uinavigationcontroller 上的控件(如 AddButton)不再可见,.. hm我> 我自己修好了..对不起,误解了;) 如果这解决了问题,别忘了接受答案中提供的解决方案【参考方案2】:

一个例子:

-(void) viewWillAppear:(BOOL)animated 

    [super viewWillAppear:animated];

    CGRect frame = CGRectMake(0, 0, 400, 44);
    UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];
    label.backgroundColor = [UIColor clearColor];
    label.font = [FontHelper fontFor:FontTargetForNavigationHeadings];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor whiteColor];
    label.text = self.navigationItem.title;
    // emboss in the same way as the native title
    [label setShadowColor:[UIColor darkGrayColor]];
    [label setShadowOffset:CGSizeMake(0, -0.5)];
    self.navigationItem.titleView = label;

【讨论】:

为此 +1。如果堆栈中的视图控制器需要不同的标题字体,那么[UINavigationBar appearance] 就无法完成这项工作。自定义 titleView 是唯一的方法。 最好将此代码放在 viewDidLoad 中,否则每次视图在层次结构中出现时,都会创建 titleView 并在系统上进行不必要的工作【参考方案3】:

ios 5 开始,您可以通过外观代理更改字体。

https://developer.apple.com/documentation/uikit/uiappearance

以下将为所有 UINavigationController 设置标题字体。

  NSMutableDictionary *titleBarAttributes = [NSMutableDictionary dictionaryWithDictionary: [[UINavigationBar appearance] titleTextAttributes]];
  [titleBarAttributes setValue:[UIFont fontWithName:@"Didot" size:16] forKey:NSFontAttributeName];
  [[UINavigationBar appearance] setTitleTextAttributes:titleBarAttributes];

要设置后退按钮的字体,请执行以下操作:

  NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithDictionary: [[UIBarButtonItem appearance] titleTextAttributesForState:UIControlStateNormal]];
  [attributes setValue:[UIFont fontWithName:@"Didot" size:12] forKey:NSFontAttributeName];
  [[UIBarButtonItem appearance] setTitleTextAttributes:attributes forState:UIControlStateNormal];

要为 iOS 11+ 中可用的大标题设置字体,请执行以下操作:

if (@available(iOS 11.0, *)) 
    NSMutableDictionary *largeTitleTextAttributes = [NSMutableDictionary dictionaryWithDictionary: [[UINavigationBar appearance] largeTitleTextAttributes]];
    [largeTitleTextAttributes setValue:[UIFont fontWithName:@"Didot" size:32] forKey:NSFontAttributeName];
    [[UINavigationBar appearance] setLargeTitleTextAttributes:largeTitleTextAttributes];

【讨论】:

iOS 7 弃用了密钥:UITextAttributeFont(请阅读,不要使用它),现在改用密钥:NSFontAttributeName。创造奇迹,让我的应用看起来好多了。谢谢! 在每个单独的视图控制器中,您还可以在当前导航栏的实例上设置标题文本属性以自定义那里的外观,例如这段代码 sn-p: [self.navigationController.navigationBar setTitleTextAttributes:@ NSFontAttributeName:[UIFont fontWithName:@"Palatino-Bold" size:28], NSForegroundColorAttributeName:[UIColor whiteColor]];【参考方案4】:

对于 iOS8+,您可以使用:

[self.navigationController.navigationBar setTitleTextAttributes:@ NSFontAttributeName: [UIFont fontWithName:@"MyFont" size:18.0f],
                                                                   NSForegroundColorAttributeName: [UIColor whiteColor]
                                                                   ];

斯威夫特:

self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "MyFont", size: 18.0)!]

【讨论】:

感谢这给了我正确的方向来使用 swift 实现自定义字体:self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "MyFont", size: 18.0)!] 谢谢,伙计!解决了。​​ 在尝试所有上述答案时总是很伤心,只是为了发现最下面的答案是最现代的 \:【参考方案5】:

来自@morgancodes 的答案将为所有UINavigationController 标题设置字体。我已经为 Swift 4 更新了它:

let attributes = [NSAttributedStringKey.font: UIFont(name: "Menlo", size: 14) as Any]
UINavigationBar.appearance().titleTextAttributes = attributes
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, for: .normal)

【讨论】:

以上是关于更改 UINavigationController 标题的字体的主要内容,如果未能解决你的问题,请参考以下文章

更改 UINavigationController 中的视图高度

Swift:更改 UINavigationController 视图的高度

快速更改UITabBar中“更多” UINavigationController的背景颜色

更改 UINavigationController 颜色和字体

UINavigationController 背景颜色更改在 iOS 中隐藏后退按钮

更改 UINavigationController 过渡效果的正确方法是啥