如何从常规UIFont创建粗体UIFont?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从常规UIFont创建粗体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)
希望这可以帮助!干杯!
由于系统字体的隐含字体系列名称,尝试使用字体或系列名称导出粗体/斜体字体不再适用于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];
}
你可以使用
[UIFont boldSystemFontOfSize:12].
如果您使用的是自定义字体,则必须直接使用该名称
[UIFont fontWithName:@"Helvetica-Bold" size:17.0].
您可以使用查找可能的字体名称
[UIFont fontNamesForFamilyName:@"American Typewriter"].
在这篇文章中:https://stackoverflow.com/a/15388946/436818 Ben M知道如何动态获取粗体版本。但扩展方法以确保获得粗体版本(如果存在),因为还有其他粗体版本,如CondensedBold。
当你在Swift中搜索粗体UIF字符时弹出这个问题,这是一个新的答案:
extension UIFont {
/// Returns a new font in the same family with the given symbolic traits,
/// or `nil` if none found in the system.
func withSymbolicTraits(_ traits: UIFontDescriptor.SymbolicTraits) -> UIFont? {
guard let descriptorWithTraits = fontDescriptor.withSymbolicTraits(traits)
else { return nil }
return UIFont(descriptor: descriptorWithTraits, size: 0)
}
}
例:
myFont.withSymbolicTraits(.taitBold) // returns the bold version of myFont
这是一个非常古老的线程,但有人可能会对如何在Swift 5中做到这一点感兴趣。
很容易这样:
var font: UIFont = UIFont.systemFont(ofSize: 18)
if let newDescriptor = font.fontDescriptor.withSymbolicTraits(.traitBold) {
font = UIFont(descriptor: newDescriptor, size: font.pointSize)
}
以上是关于如何从常规UIFont创建粗体UIFont?的主要内容,如果未能解决你的问题,请参考以下文章