2011-04-27 91 views
2

我無法找到一種簡單的方法來確定字體是否支持iOS上的粗體或斜體字體樣式。我目前的解決方案是基於試圖建立一個CTFont與希望的字體樣式:確定iOS上支持的字體樣式的最佳方法是什麼?

CTFontRef ctFont = CTFontCreateWithName(fontName, pointSize, NULL); 
CTFontRef boldFont = CTFontCreateCopyWithSymbolicTraits(ctFont, 0.0, NULL, kCTFontBoldTrait, kCTFontBoldTrait); 
if (boldFont) { 
// supports bold font face 
} 

雖然這工作得很好,它在某種程度上不覺得做到這一點的最好辦法。有沒有更好的辦法?

+0

我不這麼認爲,UIFont是UIKits簡單的字體類,其餘的都變得非常快速的低級別。 – 2011-04-27 15:17:43

回答

2

如果你使用UIFont我想你可以只遍歷fontNamesForFamilyName:

for (NSString *fontName : [UIFont fontNamesForFamilyName:fontName]) { 
    if ([fontName rangeOfString:@"Bold"].location != NSNotFound) { 
     //supports bold font face 
    } 
} 

也許不是好多了......而粗體並不總是與文字所定義的「大膽」,一些使用光和媒介。 http://www.iphonedevsdk.com/forum/iphone-sdk-development/6000-list-uifonts-available.html

+0

這也是我考慮過的事情,但我認爲在這種情況下,我會堅持我的工作。 – 2011-04-27 18:03:04

+0

我堅持我在原始問題中描述的解決方法。不過,我將這個問題標記爲最佳答案,因爲它在查找粗體字體時還提到了一些要記住的事項。 – 2011-05-17 09:11:08

1

有時甚至很難弄清楚姓氏,尤其是自定義字體。通常只需打印出所有的字體來檢查可用的字體。你可以找出所有的風格,例如粗體,斜體,濃縮粗體等,從此

NSArray *familyNames = [UIFont familyNames]; 
for (NSString *familyName in familyNames) 
{ 
    NSSArray *fontNames = [UIFont fontNamesForFamilyName:familyName]; 
    NSLog(@"%@", fontNames); 
} 
+0

我目前在我的字體選擇器中使用了類似的解決方案,但是我目前正在嘗試模仿Apple在iWork應用中使用的樣式分段控件。 – 2011-04-27 18:01:22

相關問題