Изменить стиль шрифта - (Задать текст метки в формате All-Caps) в Objective C - PullRequest
7 голосов
/ 16 января 2012

Я хочу установить стиль шрифта UILable в формате Small-Caps, как показано на рисунке ниже.

Пожалуйста, дайте мне решение для этого, если кто-нибудь знает,

enter image description here

Спасибо. :)

Ответы [ 7 ]

11 голосов
/ 16 января 2012

Если я не понял вас неправильно, это то, что вы хотите?

NSString *uppercaseString = [yourString uppercaseString];
4 голосов
/ 16 января 2012

Шрифты, доступные в iOS, не имеют заглавного стиля.Вы должны добавить собственный шрифт или попытаться создать шрифт, используя функцию CTFontDescriptorCreateCopyWithFeature.
Я думаю, что самым простым способом будет создание приписанной строки (NSAttributedString) со смешанными размерами шрифта.

3 голосов
/ 04 марта 2014

Для пользовательских шрифтов iOS 7 метод описан Энтони Мэттоксом.Для системного шрифта я не знаю способа.

Набор шрифтов маленькими буквами на iOS

1 голос
/ 16 декабря 2012

Чтобы сделать рендеринг UILabel в виде строки в верхнем регистре, где первая буква каждого слова больше, вы можете сделать что-то вроде этого:

@implementation CapitalicTextLabel

- (void)drawRect:(CGRect)rect
{

    // Drawing code
    NSArray* words = [self.text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetCharacterSpacing(context, 1);
    CGContextSetFillColorWithColor(context, [self.textColor CGColor]);
    CGAffineTransform myTextTransform = CGAffineTransformScale(CGAffineTransformIdentity, 1.f, -1.f );
    CGContextSetTextMatrix (context, myTextTransform);

    CGFloat x = 0;
    float centeredY = (self.font.pointSize + (self.frame.size.height - self.font.pointSize) / 2) - 2;
    CGFloat firstLetterSize = self.font.pointSize * 1.4;

    for (NSString* word in words)
    {
        NSString* letter = [[word substringToIndex:1] uppercaseString];
        CGContextSelectFont(context, [self.font.fontName cStringUsingEncoding:NSASCIIStringEncoding], firstLetterSize, kCGEncodingMacRoman);
        CGContextShowTextAtPoint(context, x, centeredY, [letter cStringUsingEncoding:NSASCIIStringEncoding], [letter length]);
        x = CGContextGetTextPosition(context).x;

        NSString* restOfWord = [[[word substringFromIndex:1] uppercaseString] stringByAppendingString:@" "];
        CGContextSelectFont(context, [self.font.fontName cStringUsingEncoding:NSASCIIStringEncoding], self.font.pointSize,
            kCGEncodingMacRoman);
        CGContextShowTextAtPoint(context, x, centeredY, [restOfWord cStringUsingEncoding:NSASCIIStringEncoding], [restOfWord length]);
        CGPoint v = CGContextGetTextPosition(context);
        x = CGContextGetTextPosition(context).x;
    }

}

@end

Эта реализация не обрабатывает разбиение на несколько строк и не учитывает параметр TextAlignment. Это должно быть достаточно просто, чтобы добавить впоследствии.

Пример:

enter image description here

1 голос
/ 16 января 2012

вы можете попробовать с этим

NSString * str = @ "mudit";label.text = [str uppercaseString];

это выдаст вам следующий вывод: MUDIT

0 голосов
/ 16 января 2012

Невозможно изменить размер шрифта или тип отдельной буквы в пределах UILabel.

То, что вы хотите сделать, это иметь 2 ярлыка, один в начале для первой большой буквы и один сразу после этого для оставшегося слова.

Для доступа к первой букве и остальной части слова вы можете использовать:

NSString * word = @"COMPLETED";
NSString * firstLetter = [word substringToIndex:1];
NSString * remainingWord = [word substringFromIndex:1];

То, что вы видите на картинке, это, вероятно, изображения слов, а не UILabel s.

0 голосов
/ 16 января 2012

попробуй с этим

    NSString *string = @"askdfjgjksdfgh";
NSString *upString = [string uppercaseString];
NSLog(@"U %@", upString);
...