2014-09-20 39 views
8

我有一個自定義字體包含在我的項目中,直到我將我的Xcode升級到版本6並以iOS 8作爲基礎SDK時,它才工作得很好。現在,如果我在iOS 8模擬器或設備上運行應用程序,自定義字體不再有效,但它仍然可以在我的iOS 7設備上運行。有什麼建議麼?自定義字體不適用於iOS 8

+0

如何進行進入Info.plist的樣子。該文件位於您的應用程序中的位置?你如何訪問字體? – idmean 2014-09-20 15:41:34

+0

我知道,至少在Xcode5中,如果您在文件名中使用大寫字母而不是大寫字母,但在設備上它確實很重要。也許他們也改變了Xcode6的這個規則。 – bdv 2014-09-20 19:34:42

+0

@bdv是的,我記得很久以前,當處理模擬器和設備中顯示/未顯示的一些圖像時。至於這個字體的東西,我檢查過,它都是小寫字母,並且匹配磁盤上的文件名。 – CodePlumber 2014-09-20 20:49:40

回答

1

我發現了「缺失」字體的原因。實際上字體仍然存在,但是從iOS 7到iOS 8,字體名稱有一個微妙但突然的變化:在iOS 7中,它被調用,例如, 「Custom_Font-Style」,但現在在iOS 8中被稱爲「Custom-Font-Style」。注意Custom和Font之間的下劃線現在變成短劃線。幸運的是字體系列名稱保持不變,爲「定製字體家庭」,所以現在而不是硬編碼的字體名稱我不得不從字體系列中提取出來,像這樣:

static NSString *_myCustomFontName; 

+ (NSString *)myCustomFontName 
{ 
    if (!_myCustomFontName) 
    { 
     NSArray *arr = [UIFont fontNamesForFamilyName:@"Custom Font Family"]; 
     // I know I only have one font in this family 
     if ([arr count] > 0) 
      _myCustomFontName = arr[0];   
    } 

    return _myCustomFontName; 
} 

我不知道字體文件如何顯示其信息,但現在我想我的字體文件(自定義字體.ttf)只提供字體系列名稱「自定義字體系列」,並且iOS從特定規則中獲取其字體名稱,出於某種原因從iOS 7到iOS 8,所以在使用Custom_Font-Style之前,現在我們有Custom-Font-Style。

0

如前所述,iOS 8和以前版本的字體名稱讀取方式不同。我不得不在把支票來決定使用哪個名稱:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) { 
    OS_SPECIFIC_GOTHIC_FONT = @"New"; 
} else { 
    OS_SPECIFIC_GOTHIC_FONT = @"Highway Gothic"; 
} 

您可以使用搜索,獲取信息和字體冊找到不同的名稱(iOS 8的使用,而其餘的字體冊標題在獲取信息中使用全名)

20

在我的情況下,另一個解決方案工作。當我將字體添加到項目中時,它們不會自動添加到已編譯的束包資源中。所以我必須去'目標' - >'建立階段' - >'複製捆綁資源'並手動添加所有字體。這奏效了

+0

真棒..爲我工作.. +1 – 2016-03-15 05:35:58

0

拉爾斯·布隆伯格答案Swift 3

for family in UIFont.familyNames { 
     print("\(family)") 
     for name: String in UIFont.fontNames(forFamilyName: family) { 
      print("== \(name)") 
     } 
    } 
相關問題