如何更改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
但不是所有我推荐以下方法。
- 创build一个
UIBarButtonItem
子类。 不要添加任何东西 – 你只能用它作为故事板中的自定义类和其外观代理… - 在故事板中,将所有所需
UIBarButtonItems
的自定义类更改为您的子类 - 在您的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到你的导航栏。