如何从常规UIFont创建粗体UIFont?

Mic*_*ael 29 uikit ios ios5

如果我有一个UIFont对象,是否可以将其转换为粗体?我不知道字体名称,我只有一个UIFont对象.我想要的是一个像这样的功能

UIFont *boldFontFromFont(UIFont *input)
{
    return [input derivedFontWithFontWeight:UIFontWeightBold];
}
Run Code Online (Sandbox Code Playgroud)

如何更改代码以使其正常工作.(上面的代码不起作用,我只是说明了这一点.)

提前致谢.

mar*_*rux 89

iOS 7引入了一个新的UIFontDescriptor类,使其更容易:

UIFont *font = [UIFont fontWithName:@"Helvetica Neue" size:12];
NSLog(@"plain font: %@", font.fontName); // “HelveticaNeue”

UIFont *boldFont = [UIFont fontWithDescriptor:[[font fontDescriptor] fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold] size:font.pointSize];
NSLog(@"bold version: %@", boldFont.fontName); // “HelveticaNeue-Bold”

UIFont *italicFont = [UIFont fontWithDescriptor:[[font fontDescriptor] fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic] size:font.pointSize];
NSLog(@"italic version: %@", italicFont.fontName); // “HelveticaNeue-Italic”

UIFont *boldItalicFont = [UIFont fontWithDescriptor:[[font fontDescriptor] fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold | UIFontDescriptorTraitItalic] size:font.pointSize];
NSLog(@"bold & italic version: %@", boldItalicFont.fontName); // “HelveticaNeue-BoldItalic”
Run Code Online (Sandbox Code Playgroud)

对于那些在这里寻找Cocoa(OS/X)等价物的人来说,UIFontDescriptor来自NSFontDescriptor,从10.3开始提供.


Dav*_*dez 23

如果您正在寻找快速实施:

let normalFont = UIFont(name: "FONT_NAME", size: CGFloat(20))!
let boldFont = UIFont(descriptor: normalFont.fontDescriptor.withSymbolicTraits(.traitBold)!, size: normalFont.pointSize)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!干杯!


fil*_*wag 12

要获得粗体字体,您需要从字体系列中传递字体的特定名称.您可以从给定字体中获取字体系列名称,然后列出此系列中的所有字体.通常,粗体字体的名称中将包含"粗体",但格式不严格,例如可能存在"Helvetica-BoldOblique"等变体.你可以从这段代码开始:

- (UIFont *)boldFontFromFont:(UIFont *)font
{
    NSString *familyName = [font familyName];
    NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];
    for (NSString *fontName in fontNames)
    {
        if ([fontName rangeOfString:@"bold" options:NSCaseInsensitiveSearch].location != NSNotFound)
        {
            UIFont *boldFont = [UIFont fontWithName:fontName size:font.pointSize];
            return boldFont;
        }
    }
    return nil;
}
Run Code Online (Sandbox Code Playgroud)


lou*_*ork 6

由于系统字体的隐含字体系列名称,尝试使用字体或系列名称导出粗体/斜体字体因iOS 7而无法正常工作.下面是使用UIFontDescriptor类派生粗体/斜体字体的简单扩展.

+(UIFont *) font:(UIFont *)font bold:(BOOL)bold italic:(BOOL)italic
{
    NSUInteger traits = 0;
    if (bold)
    {
        traits |= UIFontDescriptorTraitBold;
    }
    if (italic)
    {
        traits |= UIFontDescriptorTraitItalic;
    }
    return [UIFont fontWithDescriptor:[[font fontDescriptor] fontDescriptorWithSymbolicTraits:traits] size:font.pointSize];
}
Run Code Online (Sandbox Code Playgroud)


Joa*_*len 6

这是一个非常古老的线程,但现在有人可能对如何在 Swift 5 中执行此操作感兴趣。

像这样简单:

var font: UIFont = UIFont.systemFont(ofSize: 18)
if let newDescriptor = font.fontDescriptor.withSymbolicTraits(.traitBold) {
    font = UIFont(descriptor: newDescriptor, size: font.pointSize)
}
Run Code Online (Sandbox Code Playgroud)