在iOS UILabel上设置BOLD字体

时间:2013-09-18 02:21:00

标签: ios objective-c fonts uifont

我已经使用Interface Builder为UILabel中的文本指定了一个大小为14的自定义字体'Helvetica'。

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

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

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

11 个答案:

答案 0 :(得分:102)

弄乱字体名称是一件多事。并且据说你有一个斜体字体,你想把它变得大胆 - 简单地添加@"-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)

答案 1 :(得分:81)

<强>更新
从iOS 8开始,不再需要弄乱字体名称。请参阅使用UIFontDescriptorSymbolicTraits的较新答案:herehere


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

如果你想以编程方式设置它,你必须在iOS中检查粗体类型是否支持,通常Bold或Italic将具有FontName-Bold,FontName-Italic,FontName-BoldItalic格式。

现在,写一个粗体函数

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

答案 2 :(得分:33)

UIFont* boldFont = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
[myLabel setFont:boldFont];

答案 3 :(得分:6)

在swift中扩展this回答:

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

答案 4 :(得分:5)

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

您可以使用FONT NAME“Arial-BoldItalicMT”设置Bold + ITALIC

适用于所有案例:

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

答案 5 :(得分:4)

我对 Swift

采取了一些不同的做法
var boldHelveticaFont = UIFont(name: "Helvetica Neue", size: 40)?.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits.TraitBold)
self.InstructionsTextView.font = UIFont(descriptor: boldHelveticaFont!, size: 40)

答案 6 :(得分:1)

为“快餐”试一试。

此样本控制器将显示包含所有变体的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)
    }
}

wulld很高兴为UIFont类编写扩展。

答案 7 :(得分:0)

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

只需添加一个可以从任何地方调用的函数(类似于上面的一些函数)(即没有类)然后你可以在任何字符串中加入单词,在很多情况下只需调用 ONE LINE 代码:

进入像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)

答案 8 :(得分:0)

我对UILabel扩展的贡献已针对Swift 4进行了更新:

extension UILabel{
    func bold() -> UILabel {
        if let descriptor = self.font.fontDescriptor.withSymbolicTraits(UIFontDescriptor.SymbolicTraits.traitBold){
            self.font = UIFont(descriptor: descriptor, size: 0)
        }
        return self
    }
}

只需这样调用.bold()即可:

let myLabel = UILabel()
myLabel.bold()

答案 9 :(得分:0)

let boldHelveticaFont = UIFont(name: "HelveticaNeue", size: 25)?.fontDescriptor.withSymbolicTraits(UIFontDescriptor.SymbolicTraits.traitBold)
label.font = UIFont(descriptor: boldHelveticaFont!, size: 25)

答案 10 :(得分:0)

非常老的线程,但是没有人展示如何在Swift中执行该操作并保持先前的大小

label.font = UIFont.systemFont(ofSize: label.font!.pointSize, weight: .bold)