在iOS UILabel上设置BOLD字体

tec*_*man 54 fonts objective-c uifont ios

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

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

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

myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14];
Run Code Online (Sandbox Code Playgroud)

Mak*_*ski 104

弄乱字体名称是一件多事.并且据说你有一个斜体字体,你想让它变得大胆 - 简单@"-Bold"地添加到名称不起作用.还有更优雅的方式:

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

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)
    }

}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样使用它:

myLabel.font = myLabel.font.boldItalic()

myLabel.font = myLabel.font.bold()

myLabel.font = myLabel.font.withTraits(.TraitCondensed, .TraitBold, .TraitItalic)
Run Code Online (Sandbox Code Playgroud)

  • 要恢复常规,请使用:fontDescriptorWithSymbolicTraits:0 (9认同)

LE *_*ANG 84

更新:
从iOS 8开始,不再需要弄乱字体名称.相反,请查看更新的答案UIFontDescriptorSymbolicTraits:此处此处.


myLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14];
Run Code Online (Sandbox Code Playgroud)

如果你想以编程方式设置它,你必须在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;
}
Run Code Online (Sandbox Code Playgroud)

然后打电话给它

[self boldFontForLabel:yourLabel];
Run Code Online (Sandbox Code Playgroud)

  • 对于许多字体,你的`boldFontForLabel:`方法都会失败.遗憾的是,并非所有粗体字体都添加了`-Bold`. (4认同)

tha*_*rem 33

UIFont* boldFont = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
[myLabel setFont:boldFont];
Run Code Online (Sandbox Code Playgroud)


csc*_*530 6

迅速扩展这个答案:

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


Jas*_*eet 5

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

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

它适用于每个案例:

[myLabel setFont:[UIFont fontWithName:@"Arial-BoldItalicMT" size:17]];
Run Code Online (Sandbox Code Playgroud)