Проектирование меток/текстовых представлений с пользовательскими шрифтами в Interface Builder

В настоящее время я работаю над проектом iPhone, в котором все метки/текстовые представления и т.д. должны отображаться с помощью специального шрифта (я использую Xcode 4.2.1). Я провел некоторое исследование по этому вопросу, и единственное решение, похоже, добавляет файлы шрифтов в проект, соответствующим образом редактируя файл info.plist и программно программируя шрифт (т.е. Через выходы или подклассифицируя соответствующие представления). В любом случае эти подходы не приведут к созданию конструктора интерфейса, отображающего текст с пользовательским шрифтом (он все равно покажет Helvetica). Невозможно выбрать собственный шрифт с помощью инспектора атрибутов.

Хотя я не думаю, что что-то пропустил, я просто хочу убедиться, что нет другого способа, кроме программной установки шрифтов, что было бы довольно болезненным для задачи, над которой я должен работать (проблемы локализации, уникальное приложение дизайн и т.д.). Было бы неплохо получить конструктор интерфейса для отображения пользовательских шрифтов.

Ответ 1

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

Ответ 2

с использованием пользовательских шрифтов в Interface Builder доступна библиотека многократного использования.

Он использует простой трюк для этого. Установите шрифт (скажем, calibri) на все элементы пользовательского интерфейса, которые вы никогда не будете использовать в своем проекте, а FontReplacer будет выполнять сопоставление между пользовательским шрифтом и калибром. Поэтому нет необходимости делать IBOutlets или любую другую графику.

Вот ссылка на github, где вы можете скачать FontReplacer для использования в вашем проекте. https://github.com/0xced/FontReplacer

другой вопрос касается того же Шрифты, не отображаемые в Interface Builder Я также опубликовал возможное решение там

Ответ 3

Начиная с XCode 6 теперь он видит шрифт, который мне нужно импортировать (Lato).

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

Еще лучше иметь визуальное изображение или комбинировать текстовые ярлыки, чтобы добиться "приписываемого" текста!

Ответ 4

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

В общем классе, который вы используете для определения некоторых глобальных переменных, таких как Common.h, вы определяете шрифты, которые вы можете использовать

#define FONT_LATO_REGULAR(s) [UIFont fontWithName:@"Lato-Regular" size:s]
#define FONT_LATO_LIGHT(s) [UIFont fontWithName:@"Lato-Light" size:s]
#define FONT_LATO_BOLD(s) [UIFont fontWithName:@"Lato-Bold" size:s]

Затем вы импортируете Common.h(ваш общий класс) в класс, который вы реализуете, установите шрифт для метки следующим образом:

_lblTitle.font = FONT_LATO_BOLD(14.0);

Наконец, вы можете поместить все настройки шрифтов в метод для дальнейшей модификации.

- (void) setFontForLabels {
    _lblTitle.font = FONT_LATO_BOLD(14.0);
    _lblTime.font = FONT_LATO_REGULAR(13.0);
    _lblLocation.font = FONT_LATO_REGULAR(13.0);
}

Это может помочь вам немного. Убедитесь, что вы уже импортировали свои шрифты в файл с расширением.

Ответ 5

Применимо для iOS 5.0 и выше.

Создайте собственный пользовательский интерфейс (UIButton, UILabel, UITextField и т.д.)) и просто измените имя класса для определенного элемента в раскадровке, для которого вы хотите отразить изменение.

Ниже приведен код пользовательской кнопки. Вы можете сделать то же самое для любого другого элемента, который вам нужен.

CustomButtton.h

@interface CustomButtton : UIButton

@end

CustomButtton.m

@implementation CustomButtton

    - (void)awakeFromNib {
        // Initialization code

        if ([self isFontBold:self]) {

            self.titleLabel.font = [UIFont fontWithName:@"LaoUI-Bold" size:self.titleLabel.font.pointSize];

        } else {

            self.titleLabel.font = [UIFont fontWithName:@"LaoUI" size:self.titleLabel.font.pointSize];
        }

        NSLog(@"Fonts:%@",[UIFont familyNames]);
    }

    -(BOOL)isFontBold:(UIButton *)sender {

        UIFont *font = self.titleLabel.font;
        UIFontDescriptor *fontDescriptor = font.fontDescriptor;
        UIFontDescriptorSymbolicTraits fontDescriptorSymbolicTraits = fontDescriptor.symbolicTraits;
        return (fontDescriptorSymbolicTraits & UIFontDescriptorTraitBold);
    }

@end

Теперь просто установите размер шрифта и тип (Жирный или Обычный). Он автоматически обновит элемент с помощью специального шрифта.

В: [UIFont familyNames] - вы можете проверить, включено ли ваше собственное семейство шрифтов приложением или нет, которое вы определили в файле .plist.

Во-вторых: вам нужно добавить ключ в .plist файл вашего проекта, как показано ниже в скриншоте:

.plist change for custom font support in application

Ответ 6

Я не пробовал это с более ранними версиями, но с XCode 6, если у вас правильно установлен шрифт в вашем проекте. И вы устанавливаете шрифты на вашем Mac, например, используя Font Book, XCode показывает шрифты в font picker, позволяет устанавливать несколько пользовательских шрифтов и размеров в одной метке и, по-видимому, использует правильные шрифты во время выполнения.

Это не все розы. Интерфейс атрибутов интерфейса Builder все еще беспорядок. Он часто теряет отслеживание назначенных свойств, особенно если вы пытаетесь приписать больше одного абзаца одновременно. Цвет шрифта не прилипает очень хорошо. Перекрывающиеся выборы просто путают его невероятно, например, если ваш ярлык имеет два абзаца, с двумя разными шрифтами, и вы выбираете оба варианта и изменяете размер шрифта, он может устанавливать атрибуты одного или обоих абзацев на системный по умолчанию.

Ответ 8

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