Change the font of a UIBarButtonItem

UIToolbar with UIBarButtonItem

I have a UIBarButtonItem in my UIToolbar titled Done. Now I want to change the font from the default to "Trebuchet MS" with Bold. How can I do that?

92973 次浏览

因为 UIBarButtonItem 从 UIBarItem 继承,所以可以尝试

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

但这只适用于 iOS5。对于 iOS3/4,你必须使用自定义视图。

UIBarButton没有与更改字体相关的属性。但是您可以创建一个具有自定义字体的按钮,然后将其添加到 UIBarButton 中。也许能解决你的问题

假设你想支持 iOS4或者更早的版本,你最好使用 initWithCustomView:方法创建一个条形按钮,并提供你自己的视图,类似于 UIButton,你可以很容易地定制字体。

如果你想用拖放而不是编程的方式来创建按钮,你也可以将一个 UIButton 拖放到工具栏或导航栏的 Interface Builder 上。

不幸的是,这意味着自己创建按钮背景图像。在 iOS5之前,无法定制标准 UIBarButtonItem 的字体。

可以通过编程方式创建自定义 UIView:

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

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

[buttonItemView addSubview:customImage];


[buttonItemView addSubview:customLabel];


...

现在把它放进你的 UIBarButtomItem里。

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

最后将 barButtonItem 添加到导航栏。

准确地说,这可以如下所示

[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([
NSAttributedString.Key.font : UIFont.regularPoppinsFont(withSize: 26),
NSAttributedString.Key.foregroundColor : UIColor.white],
for: .normal)

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

目标丙:

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

迅捷2.3:

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

Swift 3

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

Swift 4

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

或者对于单个 UIBarButtonItem (不适用于所有应用程序范围) ,如果您特别为一个按钮使用自定义字体:

Swift 3

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

Swift 4

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

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

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

(为 iOS7 + 更新)

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

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

在我的案例中,我将 UIBarButtonItem分类,只是为了加粗文本:

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

这些都是很好的答案,只是更新到 iOS7:

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

在 Swift 中,你可以这样做:

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

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)

目标 C

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

整个应用程序:

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


}

雨燕3

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

Swift 4中,您可以通过添加以下代码来更改 UIBarButtonItem的字体和颜色。

addTodoBarButton.setTitleTextAttributes(
[
NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Bold", size: 17)!,
NSAttributedStringKey.foregroundColor: UIColor.black
], for: .normal)

这是正确的做法: 声明 barButtonItem (在本例中为 right BarButtonItem)并添加它 setTitleTextAttritribute。

navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Go!", style: .plain, target: self, action: #selector(yourFuncDestination))

在可以添加 title 属性之后

navigationItem.rightBarButtonItem?.setTitleTextAttributes([.font : UIFont.systemFont(ofSize: 18, weight: .bold), .foregroundColor : UIColor.white], for: .normal)

你可以改变大小,重量(。粗体,。重,。规则等)和颜色如何你喜欢..。 希望这个能帮上忙:)

为了完成,我想添加这个方法,它在2019年仍然在 Objective-C 中使用。 :)

_titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
_titleLabel.text = _titleBarButtonItem.title;
_titleLabel.textColor = UIColor.whiteColor;
_titleLabel.font = [UtilityMethods appFontProDisplayBold:26.0];


[_titleLabel sizeToFit];
UIBarButtonItem *titleLabelItem = [[UIBarButtonItem alloc] initWithCustomView:_titleLabel];

迅速5实施

rightButtonItem.setTitleTextAttributes([
NSAttributedString.Key.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
NSAttributedString.Key.foregroundColor: UIColor.green],
for: .normal)