如何从常规的UIFont创build一个粗体UIFont?

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

 UIFont *boldFontFromFont(UIFont *input) { return [input derivedFontWithFontWeight:UIFontWeightBold]; } 

我怎样才能改变代码,使其工作。 (上面的代码不起作用,我只是用来说明这一点。)

提前致谢。

要得到一个粗体字体,你需要从一个字体系列中传递一个特定的字体名称。 您可以从给定字体中获取字体系列名称,然后列出该系列中的所有字体。 一般来说,粗体字的名称中会包含“粗体”,但格式并不严格,例如“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; } 

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” 

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

如果你正在寻找快速实施

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

希望这可以帮助! 干杯!

由于系统字体的隐藏字体系列名称,试图从字体或系列名称派生粗体/斜体字体不再能够正常工作。 下面是使用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]; } 

你可以使用

 [UIFont boldSystemFontOfSize:12]. 

如果您使用自定义字体,则必须直接使用该名称

 [UIFont fontWithName:@"Helvetica-Bold" size:17.0]. 

你可以查找可能的字体名称

 [UIFont fontNamesForFamilyName:@"American Typewriter"]. 

在这篇文章中: https : //stackoverflow.com/a/15388946/436818本M有一个想法如何dynamic地获得大胆的版本。 但是扩展方法一定要得到大胆的版本(如果存在的话),因为还有像CondensedBold这样的其他大胆的版本。