更改UIBarButtonItem的字体


Answers:


126

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

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

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


214

确切地说,这可以按以下方式完成

[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([
        NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 26.0)!,
        NSAttributedStringKey.foregroundColor: UIColor.green],
    for: .normal)

2
为IOS7开发时,应使用NSFontAttributeName代替UITextAttributeFont,而应使用NSForegroundColorAttributeName代替UITextAttributeTextColor。
拉兹2014年

126

对于那些有兴趣在整个应用程序中设置其字体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)

迅捷3

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

斯威夫特4

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

或对于单个UIBarButtonItem(并非对于整个应用程序都适用),如果您特别为一个按钮使用了自定义字体:

迅捷3

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

斯威夫特4

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

当然,您可以将字体和大小更改为所需的字体。我更喜欢将此代码AppDelegate.m放在该didFinishLaunchingWithOptions部分的文件中。

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

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

(已针对iOS7 +更新)


3
从iOS7开始不推荐使用UITextAttribute ..键。请改用NSFontAttribute ...和NSForeground ...等。
伊曼纽尔·艾伊2014年

2
我已经更新了iOS7中引入的弃用。感谢您的注意,@ EmmanuelAy!
罗格

1
太棒了!我的应用现在看起来很漂亮(嗯,以我自己的方式!!:P)谢谢
Septronic 2015年

20

在Swift中,您可以按照以下步骤进行操作:

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

1
不要忘记字体后的感叹号(!)。错误消息:“'_'不能转换为'String'”并没有真正的帮助。
Ciryon

17

这些是上面的绝妙答案。刚刚针对iOS7更新:

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

16

迅捷3

  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];

8

为此,UIBarButtonItems我建议采用以下方法,但不是全部。

  1. 创建一个UIBarButtonItem子类。不要在其中添加任何内容-您只会将其用作情节提要中的自定义类及其外观代理...
  2. 在情节提要中,更改UIBarButtonItems子类所需的所有自定义类
  3. 在您的AppDelegate中,导入您的UIBarButtonItem子类,并将以下行添加到application:didFinishLaunchingWithOptions:

就我而言UIBarButtonItem,仅出于加粗文本的目的而将其归类:

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

8

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

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

3

这是正确的方法:声明您的barButtonItem(在本例中为rightBarButtonItem)并添加它setTitleTextAttributes。

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

在您可以添加标题属性之后

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

您可以根据自己的喜好更改大小,重量(.bold,.heavy,.regular等)和颜色。希望此帮助:)


3

Swift 5实施

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

2

迅捷3

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

1

整个应用程序:

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

    }

0

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


0

假设您要支持iOS4和更早的版本,最好的选择是使用 initWithCustomView:方法并提供自己的视图,该视图可能类似于UIButton,您可以在其中轻松自定义字体。

如果要通过拖放而不是通过编程方式创建按钮,也可以将UIButton拖到Interface Builder中的工具栏或导航栏上。

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


0

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

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

然后将图像,标签或任何您喜欢的内容添加到自定义视图:

[buttonItemView addSubview:customImage];

[buttonItemView addSubview:customLabel];

...

现在把它放在你的UIBarButtomItem

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

最后,将barButtonItem添加到导航栏。


0

为了完成,我想添加这种方法,该方法仍将在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];
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.