2012-04-21 135 views
24

在我的info.plist,我添加了一個關鍵的「通過應用程序提供的字體」,並補充EdwardianScriptITCStd.otf enter image description hereUIFont fontWithName返回nil

但是,當我試圖讓該字體,則返回nil:

NSLog(@"%@", [UIFont fontWithName:@"EdwardianScriptITCStd" 
           size:16.0f]); 

我打印使用[UIFont familyNames]字體系列和它的不存在或者:

(
    Thonburi, 
    "Snell Roundhand", 
    "Academy Engraved LET", 
    "Marker Felt", 
    "Geeza Pro", 
    "Arial Rounded MT Bold", 
    "Trebuchet MS", 
    Arial, 
    Marion, 
    "Gurmukhi MN", 
    "Malayalam Sangam MN", 
    "Bradley Hand", 
    "Kannada Sangam MN", 
    "Bodoni 72 Oldstyle", 
    Cochin, 
    "Sinhala Sangam MN", 
    "Hiragino Kaku Gothic ProN", 
    Papyrus, 
    Verdana, 
    "Zapf Dingbats", 
    Courier, 
    "Hoefler Text", 
    "Euphemia UCAS", 
    Helvetica, 
    "Hiragino Mincho ProN", 
    "Bodoni Ornaments", 
    "Apple Color Emoji", 
    Optima, 
    "Gujarati Sangam MN", 
    "Devanagari Sangam MN", 
    "Times New Roman", 
    Kailasa, 
    "Telugu Sangam MN", 
    "Heiti SC", 
    "Apple SD Gothic Neo", 
    Futura, 
    "Bodoni 72", 
    Baskerville, 
    "Chalkboard SE", 
    "Heiti TC", 
    Copperplate, 
    "Party LET", 
    "American Typewriter", 
    "Bangla Sangam MN", 
    Noteworthy, 
    Zapfino, 
    "Tamil Sangam MN", 
    "DB LCD Temp", 
    "Arial Hebrew", 
    Chalkduster, 
    Georgia, 
    "Helvetica Neue", 
    "Gill Sans", 
    Palatino, 
    "Courier New", 
    "Oriya Sangam MN", 
    Didot, 
    "Bodoni 72 Smallcaps" 
) 

我缺少什麼? 謝謝!

+4

您是否已驗證字體是否包含在您的構建目標中(位於「複製包資源」構建階段)? – 2012-04-21 00:43:55

+1

此外,我會檢查「應用程序提供的字體」的密鑰的原始值,以確保它是正確的。在Xcode中查看* .plist時,右鍵單擊並選擇「顯示原始鍵/值」,然後驗證鍵是「UIAppFonts」。 – 2012-04-21 00:46:48

+0

是的,原始值是UIAppFonts,它包含在我的副本包資源中 – 0xSina 2012-04-21 00:52:28

回答

74

我的評論被開始變得冗長,所以我決定提交,而不是一個答案:)

  1. 自定義字體只能在iOS 3.2支持及以上,所以一定要確保你的部署目標構建設置不會比版本3.2更遠。

  2. 驗證字體包含在構建目標(在「複製包資源」建設期)

  3. 檢查「由應用程序提供字體」關鍵的原始值,以確保它是正確的。在Xcode中查看* .plist時,右鍵單擊並選擇「顯示原始密鑰/值」,然後驗證密鑰是UIAppFonts

  4. 我相信iOS在使用fontWithName: size:時需要字體的PostScript名稱,您可以通過在Apple的字體書中打開字體並鍵入command+I來查找/驗證。

  5. 在某一時刻,使用自定義字體和UILabel時出現問題。我不確定這個問題是否仍然存在。解決方案是繼承UILabel並在其中設置字體。

如果它仍然不起作用,this Stack Overflow thread on custom fonts有很多信息,您可能會有一些運氣。

編輯
沒有保證,我有相同的字體文件如你,但我的機器上的PostScript名稱是「EdwardianScriptITC」

+1

感謝您的詳細回覆。 #2是問題,即使我加倍檢查,實際上不是在我的複製階段(這是我需要很快上牀睡覺的標誌)。 – 0xSina 2012-04-21 01:34:19

+0

#4驅使我瘋了,現在它像一個魅力,感謝。 – andreamazz 2012-10-09 17:02:39

+7

+1#4的信息 – user523234 2013-02-15 19:30:05

0

中使用的字體名稱似乎是「姓「在字體書中。我嘗試了PostScript名稱,但它並不總是工作。據我所知,姓氏直到現在一直在努力。

您可以檢查此信息,如上面的答案中所述,在Font Book中選擇字體並按cmd + I。

希望這有助於...

0

我有這個問題,但我發誓我工作得很好以前自定義字體。

原來我只需要在我的項目中運行「清理」XCode項目,以便它可以重新建立引用。

1

我遇到了同樣的問題。您可以在故事板的界面構建器中將字體設置爲標籤。然後得到在調試模式下的字體從標籤,如:

let cfnt = txtUsernameField.font 

然後點擊小調試窗口和字體的系列名稱上的i按鈕會在控制檯窗口所著。你可以這樣使用它:

txtUsernameField.font = UIFont(name: "MyriadPro-CondIt", size: 14) 
4

如果你的字體名包含' - '字符,請用空格字符替換它。例如,使用Arial-Bold.ttf,如[UIFont fontWithName:「Arial Bold」size:10];

+0

是的,我爲我工作!我有「 - 」,通過它們的字體名稱來擦除所有的字體!謝謝! – RomOne 2016-05-26 00:31:43