2014-10-07 62 views
2

構建iOS 7時,我的自定義字體正確顯示在UILabel中。但是,使用XCode 6和iOS 8構建另一個「標準」字體會顯示出來。iOS 8中的自定義字體未顯示

代碼:

UILabel *label = [[UILabel alloc] initWithFrame:rect]; 
UIFont *font = [[CAPTheme sharedTheme] appTitleFont]; 

label.text = title; 
label.textAlignment = NSTextAlignmentCenter; 
label.textColor = [UIColor whiteColor]; 
label.backgroundColor = [UIColor clearColor]; 
label.alpha = kLabelAlphaConstant; 
[label setFont:font]; 

...

- (UIFont *)appTitleFont 
{ 
    NSArray *familyNames = [UIFont familyNames]; 
    for (NSString *aFamilyName in familyNames) { 
     NSArray *fontNames = [UIFont fontNamesForFamilyName:aFamilyName]; 
     NSLog(@"familyname: %@", aFamilyName); 
     for (NSString *aFontName in fontNames) { 
      NSLog(@" %@", aFontName); 
     } 
    } 
    return [UIFont fontWithFamily:@"MyFont" size:15.0f]; 
} 

...

+ (UIFont*)fontWithFamily:(NSString*)fontFamily size:(float)size 
{ 
    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { 
     return [UIFont fontWithName:fontFamily size:size]; 
    } 
    else { 
     UIFont *font = [UIFont fontWithName:fontFamily size:size]; 
     UIFontDescriptor *des = [[font fontDescriptor] fontDescriptorByAddingAttributes:@{ 
                          UIFontDescriptorTextStyleAttribute: UIFontTextStyleHeadline, 
                          UIFontDescriptorSizeAttribute: @(size) 
                          }]; 
     UIFont *finalFont = [UIFont fontWithDescriptor:des size:0.0]; 
     return finalFont; 
    } 
} 

讓我們把我的字體 「MyFont」。它然後顯示在調試打印爲:

familyname: MyFont 
MyFont 
MyFont-Bold 

我已經嘗試將它添加爲ttf和otf文件。它被添加到plist文件中的Fonts provided by application下。它也被添加到目標中。我也嘗試過只使用其中一種字體。

有趣的是,我有代碼根據標籤大小調整標籤的大小。輸入不存在的字體系列名稱(即「MyFont123」)會使文本根本不顯示,這意味着它確實識別自定義字體存在,但不會顯示它。

任何想法?

這裏是我創建的一個演示項目,以顯示問題:https://www.dropbox.com/s/mkn7xb3fb2lmh20/customLabel.zip?dl=0 使用iOS 8運行它,字體將不會顯示。

編輯:我的猜測是,我不能使用fontDescriptors自定義字體,然後我回到我原來的問題,我得到的iOS 8崩潰,此錯誤:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 
'scaledValueForValue: called on a font that doesn't have a text style set' 

與此類似一個scaledValueForValue: called on a font that doesn't have a text style set

+0

奇怪。當我輸入一個不存在的字體系列名時,我會以默認字體(我認爲是Helvetica?)獲取文本。 – 2014-10-07 15:31:31

+0

你還使用fontDescriptorByAddingAttributes使它不會在iOS 8上崩潰? – Sunkas 2014-10-08 08:00:03

+0

我不確定我的理解。我們不使用iOS 8上的fontWithDescriptor,它不會崩潰。你的'[UIFont fontWithName:fontFamily size:size]'適合我在iOS 8上正常工作。你所看到的崩潰是什麼? – 2014-10-08 13:55:33

回答

9

您是否已將文件添加到Info.plist文件中?

我推薦閱讀這篇文章。

http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/

+0

是的,我添加了文件名(無路徑),擴展名爲應用程序提供的字體。我之前也檢查過這個網站,並遵循了所有的指示。 – Sunkas 2014-10-08 06:41:19

+1

那麼問題實際上是一樣的http://stackoverflow.com/questions/25773661/scaledvalueforvalue-called-on-a-font-that-doesnt-have-a-text-style-set但可以使用fontWithName爲我的自定義字體和其他地方的fontDescriptor解決方案。 – Sunkas 2014-10-09 09:41:08

+0

@亞當庫珀:謝謝:) – 2016-03-10 18:49:46