2014-10-07 3 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을 사용할 수 없다는 것입니다하지만 난이 오류와 함께 아이폰 OS 8 충돌을 얻을, 다시 내 원래의 문제에있어이에

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

유사 one scaledValueForValue: called on a font that doesn't have a text style set

+0

이상한. 존재하지 않는 서체 이름을 입력하면 텍스트가 기본 글꼴로 표시됩니다 (Helvetica라고 생각하십니까?). –

+0

그리고 fontDescriptorByAddingAttributes를 사용하여 iOS 8에서 충돌하지 않도록 하시겠습니까? – Sunkas

+0

내가 이해할 지 모르겠다. iOS 8에서는 fontWithDescriptor를 사용하지 않으며 충돌하지 않습니다. 귀하의'[UIFont fontWithName : fontFamily size : size]'는 iOS 8에서 잘 동작합니다. 당신이보고있는 충돌은 무엇입니까? –

답변

9

Info.plist 파일에 아직 파일을 추가하지 않으셨습니까?

이 기사도 읽는 것이 좋습니다.

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

+0

예, 응용 프로그램에서 제공하는 글꼴의 확장자를 가진 파일 이름 (경로 없음). 나는 또한 전에 그 사이트를 확인하고 모든 포인터를 따라 갔다. – Sunkas

+1

글쎄 문제는 실제로 http://stackoverflow.com/questions/25773661/scaledvalueforvalue-called-on-a-font-that-doesnt-have-a-text-style-set과 같았지만 fontWithName을 사용할 수있었습니다. 사용자 정의 글꼴 및 fontDescriptor 솔루션을 제공합니다. – Sunkas

+0

@ Adam Cooper : thanks :) –

관련 문제