Интервал между буквами в iOS

У меня есть следующий код:

[[cancelButton titleLabel] setFont:[UIFont fontWithName:@"ProximaNova-Regular" size:15]];

Как бы установить интервал букв?

Ответы

Ответ 1

Вы не можете изменить интервал букв в реферате, что означает, что вы не можете изменить его вообще под iOS 5 и ниже.

Как и в iOS 6, вы можете использовать привязанную строку, а не ванильную, к UILabel. Процесс подталкивания присваиваемой строки работает несколько иначе, чем процесс для подталкивания обычного - шрифт, цвет текста и множество других свойств задаются в строке, а не на ярлыке. Причина в том, что атрибутные строки позволяют устанавливать разные атрибуты для разных областей строки. Таким образом, вы можете установить строку, которая объединяет несколько шрифтов, цвета текста и т.д.

Один из поддерживаемых атрибутов основного текста - kCTKernAttributeName, который с iOS 6 проще использовать с помощью добавления UIKit NSKernAttributeName. Вы можете использовать кернинг для регулировки горизонтального интервала глифов.

В iOS 5 и ранее вам приходилось делать много умственных прыжков между объектами Core Foundation C и объектами Objective-C UIKit. С 6, что больше не нужно. Но будьте осторожны, если вы будете искать в сети, что все будет намного легче до 6 - если вы увидите множество прикладов __bridge и руководство CFRelease, то вы, вероятно, смотрите на старый код.

В любом случае, предположим, что у вас есть что-то вроде:

UILabel *label = [cancelButton titleLabel];

UIFont *font = <whatever>;
UIColor *textColour = <whatever>;
NSString *string = <whatever>;

label.text = string;
label.font = font;
label.textColor = textColour;

Вместо этого вы сделаете что-то большее:

NSAttributedString *attributedString = 
    [[NSAttributedString alloc]
          initWithString:string
          attributes:
              @{
                    NSFontAttributeName : font,
                    NSForegroundColorAttributeName : textColour
              }];

label.attributedText = attributedString;

В вашем случае также можно настроить общий кернинг, который вы добавили:

NSAttributedString *attributedString = 
    [[NSAttributedString alloc]
          initWithString:string
          attributes:
              @{
                    NSFontAttributeName : font,
                    NSForegroundColorAttributeName : textColour,
                    NSKernAttributeName : @(-1.3f)
              }];

label.attributedText = attributedString;

Или любое значение кернинга, которое вы хотите применить. См. Различные константы внизу Справка NSAttributedString UIKit дополнений для различных других атрибутов, которые вы можете применить, и какую версию iOS они впервые стали доступны.

Значительно позднее добавление: пока вы являетесь одним из самых маленьких людей, с которыми вы встретитесь, я думаю, что это эквивалент в Swift:

button.titleLabel?.attributedText =
    NSAttributedString(
        string: string,
        attributes:
        [
            NSFontAttributeName: font,
            NSForegroundColorAttributeName: textColour,
            NSKernAttributeName: -1.3
        ])

Ответ 2

Один из поддерживаемых атрибутов Core Text - это имя kCTKernAttributeName, которое с iOS 6 проще использовать через дополнение NSKernAttributeName UIKit. Вы можете использовать кернинг для регулировки горизонтального интервала глифов.

Кернинг - это настройка пространства между двумя уникальными буквами. Кернинг варьируется между разными парами символов. Например, комбинация типа "AVA" будет иметь различный кернинг между персонажами, чем что-то вроде "VVV"

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

То, что вы ищете, это отслеживание (aka интервал между буквами), который является интервалом между всеми буквами в данном блоке текста. К сожалению, iOS, похоже, не позволяет вам контролировать этот атрибут.

Ответ 3

    NSAttributedString *cancelButtonAttributedString =[[NSAttributedString alloc]
                                           initWithString:@"Hello"
                                           attributes:
                                           @{
                                             NSKernAttributeName : @(1.5)
                                             }];
    [cancelButton setAttributedTitle:bittonAttributedString forState:UIControlStateNormal];

Это простой ответ для вышеуказанного вопроса