在iOS UILabel上设置BOLD字体

我已经使用Interface Builder为UILabel中的文本分配了大小为14的“Helvetica”自定义字体。

我在多个地方使用相同的标签,但在某些地方,我必须以粗体显示文本。

有没有什么办法可以指定使现有的字体粗体,而不是再次创build整个UIFont? 这就是我现在所做的:

myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14]; 

更新:
从iOS 8开始,不再需要使用字体名称。 相反,请参阅使用UIFontDescriptorSymbolicTraits更新的答案: 这里和这里 。


 myLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14]; 

如果要以编程方式设置,则必须在iOS中检查粗体types是否支持,通常粗体或斜体将使用FontName-Bold,FontName-Italic,FontName-BoldItalic格式。

现在,写一个大胆的function

 -(void)boldFontForLabel:(UILabel *)label{ UIFont *currentFont = label.font; UIFont *newFont = [UIFont fontWithName:[NSString stringWithFormat:@"%@-Bold",currentFont.fontName] size:currentFont.pointSize]; label.font = newFont; } 

然后调用它

 [self boldFontForLabel:yourLabel]; 

混乱的字体名称是一个可怕的业务。 而且据说你有一个斜体字体,你想使它粗体 – 仅仅加上@"-Bold"这个名字是行不通的。 有更多更优雅的方式:

 - (UIFont *)boldFontWithFont:(UIFont *)font { UIFontDescriptor * fontD = [font.fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold]; return [UIFont fontWithDescriptor:fontD size:0]; } 

size:0表示“保持大小,因为它在描述符中”。 如果您需要获得斜体字体,您可能会发现有用的UIFontDescriptorTraitItalic特征

在Swift中,写一个简单的扩展就不错了:

 extension UIFont { func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont { let descriptor = self.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits(traits)) return UIFont(descriptor: descriptor, size: 0) } func bold() -> UIFont { return withTraits(.TraitBold) } func italic() -> UIFont { return withTraits(.TraitItalic) } func boldItalic() -> UIFont { return withTraits(.TraitBold, .TraitItalic) } } 

那么你可以这样使用它:

 myLabel.font = myLabel.font.boldItalic() myLabel.font = myLabel.font.bold() myLabel.font = myLabel.font.withTraits(.TraitCondensed, .TraitBold, .TraitItalic) 
 UIFont* boldFont = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]]; [myLabel setFont:boldFont]; 

在swift中扩展这个答案:

 extension UIFont { func bold() -> UIFont { let descriptor = self.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits.TraitBold) return UIFont(descriptor: descriptor, size: 0) } } 

我们只需要正确的字体名称。 我发现iOSFonts.com是知道使用什么名字的最有用的资源。

您可以使用字体名称“Arial-BoldItalicMT”来设置Bold + ITALIC

它适用于每种情况:

 [myLabel setFont:[UIFont fontWithName:@"Arial-BoldItalicMT" size:17]]; 

我用Swift做了一点点改变

 var boldHelveticaFont = UIFont(name: "Helvetica Neue", size: 40)?.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits.TraitBold) self.InstructionsTextView.font = UIFont(descriptor: boldHelveticaFont!, size: 40) 

为“swifters”尝试。

此示例控制器将显示所有变体的4个标签。

 import UIKit class ViewController: UIViewController { var labl: UILabel? var labl2: UILabel? var labl3: UILabel? var labl4: UILabel? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let font = UIFont.systemFontOfSize(32) labl = UILabel(frame: CGRectMake(20,20,400, 45)) labl!.text = "Attention:" labl!.font = font labl2 = UILabel(frame: CGRectMake(20,60,400, 45)) labl2!.text = "Attention:" labl2!.font = bold(font) labl3 = UILabel(frame: CGRectMake(20,100,400, 45)) labl3!.text = "Attention:" labl3!.font = italic(font) labl4 = UILabel(frame: CGRectMake(20,140,400, 45)) labl4!.text = "Attention:" labl4!.font = boldAndItalic(font) self.view.addSubview(labl!) self.view.addSubview(labl2!) self.view.addSubview(labl3!) self.view.addSubview(labl4!) } // nice to write an extension... func bold(font: UIFont) -> UIFont { let descriptor = font.fontDescriptor().fontDescriptorWithSymbolicTraits([.TraitBold]) return UIFont(descriptor: descriptor, size: 0) } func boldAndItalic(font: UIFont) -> UIFont { let descriptor = font.fontDescriptor().fontDescriptorWithSymbolicTraits([.TraitBold, .TraitItalic]) return UIFont(descriptor: descriptor, size: 0) } func italic(font: UIFont) -> UIFont { let descriptor = font.fontDescriptor().fontDescriptorWithSymbolicTraits([.TraitItalic]) return UIFont(descriptor: descriptor, size: 0) } } 

很高兴为UIFont类写一个扩展。

你可能不需要这样的“扩展”,如果你想这个任何自定义字体…

只需添加一个函数(类似于上面的一些),你可以从任何地方调用(即没有课程),然后你可以在任何string中强化单词,通过调用一行代码:

要进入像constants.swift文件:

 import Foundation import UIKit func addBoldText(fullString: NSString, boldPartOfString: NSString, font: UIFont!, boldFont: UIFont!) -> NSAttributedString { let nonBoldFontAttribute = [NSFontAttributeName:font!] let boldFontAttribute = [NSFontAttributeName:boldFont] let boldString = NSMutableAttributedString(string: fullString as String, attributes:nonBoldFontAttribute) boldString.addAttributes(boldFontAttribute, range: fullString.rangeOfString(boldPartOfString as String)) return boldString } 

然后,你可以为任何UILabel调用这一行代码:

 self.UILabel.attributedText = addBoldText("Check again in 30 DAYS to find more friends", boldPartOfString: "30 DAYS", font: normalFont!, boldFont: boldSearchFont!) //Mark: Albeit that you've had to define these somewhere: let normalFont = UIFont(name: "INSERT FONT NAME", size: 15) let boldFont = UIFont(name: "INSERT BOLD FONT", size: 15)