Xcode & Objective- C: Невозможно отобразить жирный шрифт для пользовательского шрифта из ZIP-файла - PullRequest
0 голосов
/ 24 февраля 2020

В этом приложении мы распаковываем файл, который содержит папку Fonts. Внутри этой папки у нас есть собственный шрифт в формате ttf. Затем мы отображаем этот пользовательский шрифт в ярлыках и кнопках, и он работает должным образом, за исключением BOLD. Действительно, жирный шрифт заменяется стандартным шрифтом.

Это код для загрузки шрифта:

- (UIFont*)loadFont:(NSString *)withName :(int)systemIndex :(CGFloat)size :(UIFont*) dftFont
{

    if ([self isAppleFont:withName]) {
         return [UIFont fontWithName:withName size:size];
    }


    if ([fontsDictionary objectForKey:withName]) {
        return [fontsDictionary objectForKey:withName];
    }

     NSFileManager *fileManager = [NSFileManager defaultManager];
     NSString* myString = [NSString stringWithFormat:@"%@.ttf", withName];
     NSString* fontsFolderPath = [SystemsManager fontsFolderForSystemIndex:systemIndex];
     NSString* completeFontName = [NSString stringWithFormat:@"%@/%@", fontsFolderPath,myString];

     if ([fileManager fileExistsAtPath:fontsFolderPath] && [fileManager fileExistsAtPath:completeFontName]) {

         NSData *data = [NSData dataWithContentsOfFile:completeFontName];
         CFErrorRef error;
         CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);
         CGFontRef font = CGFontCreateWithDataProvider(provider);

         if(!CTFontManagerRegisterGraphicsFont(font, &error)){
             CFStringRef errorDescription = CFErrorCopyDescription(error);
             NSLog(@"Failed to load font: %@", errorDescription);
         }

         CTFontRef ctFont = CTFontCreateWithGraphicsFont(font, size, NULL, NULL);
         //CTFontRef ctFont = CTFontCreateWithGraphicsFont(font, 0, NULL, NULL);
         UIFont *uiFont = CFBridgingRelease(ctFont);

         [fontsDictionary setObject:uiFont forKey:withName];

         return uiFont;
     } else {
          return dftFont;
     }

И, наконец, код, который устанавливает жирный шрифт.

-(void)setLabel:(NSString*)bold :(NSString*)italic :(UILabel*)label :(CGFloat*)withSize {

    BOOL isBold = ![bold isEqualToString:@"REGULAR"];
    BOOL isItalic = ![italic isEqualToString:@"NonItalic"];

    UIFontDescriptor * fontBold = [label.font.fontDescriptor
    fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];

    UIFontDescriptor * fontItalic = [label.font.fontDescriptor
    fontDescriptorWithSymbolicTraits: UIFontDescriptorTraitItalic];

    UIFontDescriptor * fontBoldItalic = [label.font.fontDescriptor
    fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold
                    | UIFontDescriptorTraitItalic];


   if ( isBold && isItalic )
    {
        label.font = [UIFont fontWithDescriptor:fontBoldItalic size:0];

    }
    if (isBold && !isItalic )
    {
        label.font = [UIFont fontWithDescriptor:fontBold size:0];
    }
     if (isItalic)
    {
        label.font = [UIFont fontWithDescriptor:fontItalic size:0];
    }

    label.font = [label.font fontWithSize:*withSize];

}

Я сделал что-то не так или, может быть, невозможно отобразить BOLD для пользовательских шрифтов?

С уважением.

1 Ответ

0 голосов
/ 25 февраля 2020

Я мог бы решить эту проблему, поместив версию шрифта Bold в папку Fonts и, при необходимости, загрузив ее.

Поэтому, если вам нужен жирный шрифт для пользовательского шрифта в iOS, вам нужно получить отдельную жирную версию этого шрифта, чтобы он работал.

...