拥有任何字体的
到目前为止,我发现的所有内容都是你必须设置正确的字体名称。然而,这是不可靠的。
我能做的是找到给定字体系列的所有字体。
UILabel
,我该如何找出它是否已经是粗体?或者我该如何将其设置为粗体?在CSS中,我有一个font-weight
属性。我想要类似的东西。到目前为止,我发现的所有内容都是你必须设置正确的字体名称。然而,这是不可靠的。
Cochin-Bold
是Cochin
的粗体版本,但ArialMT-Bold
并不是ArialMT
的粗体版本,而是Arial-BoldMT
,所以仅添加-Bold
是不够的。(自定义字体的粗体版本也可能具有完全不同的名称)。我能做的是找到给定字体系列的所有字体。
__block UIFont *font = myLabel.font;
[[UIFont fontNamesForFamilyName:font.familyName] enumerateObjectsUsingBlock:^(NSString *fontName, NSUInteger idx, BOOL *stop) {
if ([fontName rangeOfString:@"bold" options:NSCaseInsensitiveSearch].location != NSNotFound) {
font = [UIFont fontWithName:fontName size:font.pointSize];
*stop = YES;
}
}];
myLabel.font = font;
但这并不可靠。我很容易得到一份BoldItalic
版本。我可以改进我的检查以避免这种情况,但这并不是一个好的解决方案。
也许CoreText可以帮助解决这个问题?
CTFontCopyFullName
返回例如"American Typewriter Bold"
,但我想要"AmericanTypewriter-Bold"
。为了得到正确的名称,我需要使用CFStringRef boldName = CTFontCopyName(boldFont, kCTFontPostScriptNameKey)
。 - Björn LandmesserCTFontCopyPostScriptName
获取PostScript名称。这个答案应该进行更正,因为原帖中的方法不起作用。 - warrenmUIFontDescriptor
被引入,这使得这个过程变得更加容易。我会发布一个新的答案。 - Amy Worrall