如何更改UIBarButtonItem的字体?

UIToolbar与UIBarButtonItem

我的UIToolbar有一个名为“完成”UIBarButtonItem 。 现在我想用粗体将字体从默认改为“Trebuchet MS” 。 请在这个任务上指导我。

由于UIBarButtonItem是从UIBarIteminheritance的,所以可以试试

 - (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state 

但这仅适用于iOS5。 对于iOS 3/4,您将不得不使用自定义视图。

准确地说,这可以按照下面的方式完成

 [buttonItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:@"Helvetica-Bold" size:26.0], NSFontAttributeName, [UIColor greenColor], NSForegroundColorAttributeName, nil] forState:UIControlStateNormal]; 

或者使用对象字面语法:

 [buttonItem setTitleTextAttributes:@{ NSFontAttributeName: [UIFont fontWithName:@"Helvetica-Bold" size:26.0], NSForegroundColorAttributeName: [UIColor greenColor] } forState:UIControlStateNormal]; 

为了方便起见,下面是Swift实现:

 buttonItem.setTitleTextAttributes([ NSFontAttributeName: UIFont(name: "Helvetica-Bold", size: 26.0)!, NSForegroundColorAttributeName: UIColor.greenColor()], forState: UIControlState.Normal) 

对于那些有兴趣使用UIAppearance来在整个应用程序中设置UIBarButtonItem的字体,可以使用以下代码来完成:

目标C:

 NSDictionary *barButtonAppearanceDict = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Light" size:12.0], NSForegroundColorAttributeName: [UIColor whiteColor]}; [[UIBarButtonItem appearance] setTitleTextAttributes:barButtonAppearanceDict forState:UIControlStateNormal]; 

Swift 2.3:

 UIBarButtonItem.appearance().setTitleTextAttributes( [ NSFontAttributeName : UIFont(name: "HelveticaNeue-Light", size: 12)!, NSForegroundColorAttributeName : UIColor.white ], for: .normal) 

Swift 3.0 / 4

 UIBarButtonItem.appearance().setTitleTextAttributes( [ NSFontAttributeName : UIFont(name: "HelveticaNeue-Light", size: 12)!, NSForegroundColorAttributeName : UIColor.white, ], for: .normal) 

或者对于单个UIBarButtonItem(不适用于所有应用程序范围),如果您具有特定于一个button的自定义字体:

 let barButtonItem = UIBarButton() barButtonItem.setTitleTextAttributes([ NSFontAttributeName : UIFont(name: "FontAwesome", size: 26)!, NSForegroundColorAttributeName : UIColor.white, ], for: .normal) barButtonItem.title = "\u{f02a}" 

当然,你可以改变字体和大小,以任何你想要的。 我更喜欢把这个代码放在didFinishLaunchingWithOptions部分的AppDelegate.m文件中。

可用的属性(只需将它们添加到NSDictionary ):

  • NSFontAttributeName :用UIFont改变字体
  • NSForegroundColorAttributeName :用UIColor改变颜色
  • NSShadow :添加投影(请参阅NSShadow类参考)

(更新了iOS7 +)

在Swift中你可以这样做:

 backButtonItem.setTitleTextAttributes([ NSFontAttributeName : UIFont(name: "Helvetica-Bold", size: 26)!, NSForegroundColorAttributeName : UIColor.blackColor()], forState: UIControlState.Normal) 

以上是很好的答案。 只是更新iOS7:

 NSDictionary *barButtonAppearanceDict = @{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Thin" size:18.0] , NSForegroundColorAttributeName: [UIColor whiteColor]}; [[UIBarButtonItem appearance] setTitleTextAttributes:barButtonAppearanceDict forState:UIControlStateNormal]; 

Swift3

  buttonName.setAttributedTitle([ NSFontAttributeName : UIFont.systemFontOfSize(18.0), NSForegroundColorAttributeName : UIColor.red,NSBackgroundColorAttributeName:UIColor.black], forState: UIControlState.Normal) 

迅速

  barbutton.setTitleTextAttributes([ NSFontAttributeName : UIFont.systemFontOfSize(18.0), NSForegroundColorAttributeName : UIColor.redColor(),NSBackgroundColorAttributeName:UIColor.blackColor()], forState: UIControlState.Normal) 

Objective-C的

  [ barbutton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:@"Helvetica-Bold" size:20.0], NSFontAttributeName, [UIColor redColor], NSForegroundColorAttributeName,[UIColor blackColor],NSBackgroundColorAttributeName, nil] forState:UIControlStateNormal]; 

为了做到这一点的一些UIBarButtonItems但不是所有我推荐以下方法。

  1. 创build一个UIBarButtonItem子类。 不要添加任何东西 – 你只能用它作为故事板中的自定义类和其外观代理…
  2. 在故事板中,将所有所需UIBarButtonItems的自定义类更改为您的子类
  3. 在您的AppDelegate中导入您的UIBarButtonItem子类,并将以下行添加到application:didFinishLaunchingWithOptions:

在我的情况下,我将UIBarButtonItem为仅用于加粗文本的唯一目的:

 [[BoldBarButtonItem appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIFont boldSystemFontOfSize:18.0], NSFontAttributeName,nil] forState:UIControlStateNormal]; 

迅速3

 barButtonName.setTitleTextAttributes( [NSFontAttributeName : UIFont.systemFont(ofSize: 18.0),NSForegroundColorAttributeName : UIColor.white], for: .normal) 

整个应用程序:

 if let font = UIFont(name: "AvenirNext-DemiBold", size: 15) { UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName:TOOLBAR_TITLE_COLOR], forState: UIControlState.Normal) } 

UIBarButton没有与更改字体相关的属性。 但是你可以创build一个自定义字体的button,然后添加到UIBarButton。 这可能会解决你的问题

假设你想要支持iOS4和更早的版本,最好的办法是使用initWithCustomView:方法创build一个barbutton,并提供你自己的视图,这个视图可以像UIButton一样,你可以很容易的自定义字体。

如果你想通过拖放来代替编程创buildbutton,你也可以将UIButton拖到Interface Builder的工具栏或导航栏上。

不幸的是,这意味着要自己创buildbutton背景图片 在iOS5之前,没有办法自定义标准UIBarButtonItem的字体。

您可以编程方式创build一个自定义的UIView

 UIView *buttonItemView = [[UIView alloc] initWithFrame:buttonFrame]; 

然后添加图片,标签或任何你喜欢的自定义视图:

 [buttonItemView addSubview:customImage]; [buttonItemView addSubview:customLabel]; ... 

现在把它放在你的UIBarButtomItem

 UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:buttonItemView]; 

最后添加barButtonItem到你的导航栏。