如果我有一個UIFont
對象,是否可以將它轉換爲粗體?我不知道字體名稱,我只有一個UIFont對象。我想要的是一個功能,如如何從常規UIFont創建粗體UIFont?
UIFont *boldFontFromFont(UIFont *input)
{
return [input derivedFontWithFontWeight:UIFontWeightBold];
}
如何更改代碼以使其可以工作。提前(上面的代碼不工作,我只是做它來說明這一點。)
感謝。
如果我有一個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;
}
您可以使用
[UIFont boldSystemFontOfSize:12].
如果您正在使用自定義字體,你必須使用的名稱直接
[UIFont fontWithName:@"Helvetica-Bold" size:17.0].
你可以看一下有可能的字體名稱
[UIFont fontNamesForFamilyName:@"American Typewriter"].
在這篇文章中:https://stackoverflow.com/a/15388946/436818本M有一個想法如何動態地獲得粗體版本。但是擴展該方法以確保獲得大膽版本(如果存在),因爲還有其他大膽版本,如CondensedBold。
的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」
誰的人來到這裏尋找可可(OS/X)等同,UIFontDescriptor來自NSFontDescriptor,可用自10.3 。
試圖使用的字體或家人的名字不再正常工作,因爲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];
}
如果你正在尋找迅速執行:
let normalFont = UIFont(name: "FONT_NAME", size: CGFloat(20))!
let boldFont = UIFont(descriptor: normalFont.fontDescriptor.withSymbolicTraits(.traitBold)!, size: normalFont.pointSize)
希望這有助於!乾杯!
嗯,有一個問題:對於systemFont,你有familyName ==「.Helvetica NeueUI」和fontNames數組是空數組: -/ – Michael
@Michael我試過了'UIFont * boldFont = [self boldFontFromFont :[UIFont systemFontOfSize:12.0]];'。 NSLog的輸出是:' font-family:「Helvetica-BoldOblique」; font-weight:bold; font-style:italic; font-size:12px' –
filwag
好的,你用過ios6嗎?因爲我使用ios 5.也許字體系統在ios6中改變了? – Michael