У меня есть собственный шрифт, который я хочу использовать для всего, что отображает текст в моем приложении, ярлыки, представления текста и т. Д.
Есть ли способ установить шрифт по умолчанию (ярлыки по умолчанию используют SystemFont) для всего приложения?
IBDesignable
эти дни. Надеюсь, поможет. Также рассмотрим этот интересный QA: stackoverflow.com/a/38000466/294884Ответы:
Кажется, это возможно в iOS 5 с использованием прокси-сервера UIAppearance.
Это установит шрифт таким, какой у вас есть пользовательский шрифт для всех UILabels в вашем приложении. Вам нужно будет повторить это для каждого элемента управления (UIButton, UILabel и т. Д.).
Помните, что вам нужно поместить значение UIAppFonts в ваш info.plist и включить имя шрифта, который вы включаете.
источник
setFont:
метод устарелUILabel
. Он устарел,UIButton
ноtitleLabel
вместо него используется шрифт для свойства, которое являетсяUILabel
, так что просто установить шрифт с помощью прокси-сервера для появленияUILabel
должно быть хорошо.Swift 5
Основываясь на ответе Фабио Оливейры ( https://stackoverflow.com/a/23042694/2082851 ), я делаю свой собственный быстрый 4.
Короче говоря, это расширение обменов по умолчанию функция
init(coder:)
,systemFont(ofSize:)
,boldSystemFont(ofSize:)
,italicSystemFont(ofSize:)
с моими пользовательскими методами.Обратите внимание, что он не полностью реализован, но вы можете обмениваться большим количеством методов на основе моей реализации.
источник
if let fontAttribute = fontDescriptor.fontAttributes[.nsctFontUIUsage] as? String {
мне удалось.UILabel
s, которые устанавливают стиль текста (полужирный, заголовок, заголовок и т. д.) ... работает только с шрифтом, который имеет определенный размер и набор системных шрифтов. @ nahung89Есть также другое решение, которое будет переопределять systemFont.
Просто создайте категорию
UIFont + SystemFontOverride.h
UIFont + SystemFontOverride.m
Это заменит реализацию по умолчанию, и большинство UIControls используют systemFont.
источник
Если вы используете Swift, вы можете создать расширение UILabel:
А потом, где вы делаете свою внешность прокси:
Существует эквивалентный код Objective C, использующий
UI_APPEARANCE_SELECTOR
свойство с именемsubstituteFontName
.прибавление
Для случая, когда вы хотите установить жирный и обычный шрифты отдельно:
Тогда для ваших прокси UIAppearance:
Примечание: если вы обнаружите, что полужирная подстановка не работает, возможно, имя шрифта по умолчанию не содержит «Средний». При необходимости измените эту строку для другого соответствия (спасибо Мейсону в комментариях ниже).
источник
UILabel
расширение, чтобы взять дополнительное имя шрифта для жирного шрифта. Затемset
выполните проверку, чтобы увидеть, есть ли «Bold» в имени шрифта, и проигнорируйте набор в одном случае, а затем используйте его в другом. Я отредактирую и добавлю пример.rangeOfString("Medium")
и это сработало.Развивая ответ Hugues BR, но используя метод swizzling, я пришел к решению, которое успешно заменяет все шрифты на нужный шрифт в моем приложении.
Подход с динамическим типом должен быть тем, что вы должны искать в iOS 7. Следующее решение не использует динамический тип.
Ноты:
- initWithCoder:
переопределения. Однако это не охватит все случаи;Это решение использует два разных метода для достижения конечного результата. Первый - переопределить методы класса UIFont
+ systemFontWithSize:
и аналогичные методам , использующим мои альтернативы (здесь я использую «Zapfino», чтобы не сомневаться в том, что замена прошла успешно).Другой метод состоит в том, чтобы переопределить
- initWithCoder:
метод в UIFont, чтобы заменить любое вхождениеCTFontRegularUsage
или подобное на мои альтернативы. Этот последний метод был необходим, потому что я обнаружил, чтоUILabel
объекты, закодированные в файлах NIB, не проверяют+ systemFontWithSize:
методы, чтобы получить их системный шрифт, а вместо этого кодируют их какUICTFontDescriptor
объекты. Я пытался переопределить,- awakeAfterUsingCoder:
но каким-то образом он вызывался для каждого закодированного объекта в моей раскадровке и вызывал сбои. Переопределение- awakeFromNib
не позволило бы мне прочитатьNSCoder
объект.источник
UIAlertController
) не меняют шрифт.Чтобы завершить ответ Сэнди Чепмена , вот решение в Objective-C (поместите эту категорию в любое место, которое вы хотите изменить
UILabel
Appearance
):В файле интерфейса должен быть объявлен этот метод публично для использования позже из таких мест, как ваш делегат приложения:
Затем вы можете изменить с
Appearance
помощью:источник
КОММЕНТАРИЙ ДЛЯ SWIFT 3.0 И ПРЕДУПРЕЖДЕНИЕ SWIFT
Вы можете удалить предупреждение в строке:
Заменив его на:
источник
Для Swift 5
Все приведенные выше ответы верны, но я сделал немного по-разному, в зависимости от размера устройства . Здесь, в классе ATFontManager, я сделал размер шрифта по умолчанию, который определяется в верхней части класса как defaultFontSize , это размер шрифта iphone plus, и вы можете изменить его в соответствии с вашими требованиями.
Я добавил определенное имя шрифта, для большего количества вы можете добавить имя шрифта и введите здесь.
Этот класс относится к детектору устройства, чтобы обеспечить соответствующий размер шрифта в соответствии с устройством.
Как пользоваться. Надеюсь, это поможет.
источник
Ни одно из этих решений не работает универсально во всем приложении. Одна вещь, которую я нашел, чтобы помочь управлять шрифтами в Xcode, - это открыть раскадровку как исходный код (раскадровка по нажатию клавиши «Control» в «Навигаторе файлов»> «Открыть как»> «Исходный код»), а затем выполнить поиск и замену.
источник
Тип шрифта всегда задается в коде и перо / раскадровка.
Для кода, как сказал Hugues BR , сделать это в категориях может решить проблему.
Для пера / раскадровки мы можем использовать метод Swizzling awakeFromNib, чтобы изменить тип шрифта, поскольку элемент пользовательского интерфейса из пера / раскадровки всегда вызывает его перед отображением на экране.
Я полагаю, вы знаете Аспекты . Это библиотека для программирования АОП, основанная на методе Swizzling. Мы создаем каталог для UILabel, UIButton, UITextView, чтобы реализовать его.
UILabel:
UIButton:
UITextField:
UITextView:
Вот и все, вы можете изменить HelveticaNeue-light на макрос с вашим именем шрифта.
источник
После просмотра нескольких постов я создал свое собственное преобразование типографии для Swift 4 , оно охватывает большинство случаев, таких как:
1. Добавьте шрифты в структуру проекта и в файл .plist (с тем же именем):
затем
Наконец, вызовите созданный метод в
Appdelegate
следующем порядке:источник
Вероятно, нет, вы, вероятно, будете сами устанавливать шрифт на своем элементе управления, но вы можете упростить процесс, централизовав, откуда вы получаете типы шрифтов, например, у делегата приложения или в каком-либо другом общем классе есть метод, который возвращает шрифт и все, что нужно для установки шрифта, может вызывать этот метод, который поможет в случае, если вам нужно изменить ваш шрифт, вы будете менять его в одном месте, а не везде, где вы устанавливаете шрифты ... Другой альтернативой может быть создание подклассов ваши элементы пользовательского интерфейса, которые будут автоматически устанавливать шрифт, но это может быть излишним ..
источник
NUI является альтернативой прокси-серверу UIAppearance. Он дает вам контроль над шрифтом (и многими другими атрибутами) большого количества типов элементов пользовательского интерфейса во всем приложении, просто изменяя таблицу стилей, которую можно повторно использовать в нескольких приложениях.
После добавления
NUILabel
класса к вашим меткам вы можете легко контролировать их шрифт в таблице стилей:Если у вас есть ярлыки с разными размерами шрифта, вы можете контролировать их размеры с помощью классов Label, LargeLabel и SmallLabel в NUI или даже быстро создавать свои собственные классы.
источник
Использую как этот тип шрифта класса в Swift. Использование класса расширения шрифта.
источник
Для Xamarin.iOS внутри
FinishedLaunching()
положенного кода AppDelegate, например:установить шрифт для всего приложения и добавить «
UIAppFonts
» в Info.plist, путь должен быть путем, где находится ваш файл шрифта .ttf. Для меня это было внутри папки «шрифты» в моем проекте.источник
Как уже упоминалось @Randall IOS 5.0 и старше
UIApperance
прокси может быть использован для настройки внешнего вида всех экземпляров класса читать далее .Xcodes auto complete не отображает все доступные свойства и может выдать ошибку, но вы можете просто напечатать ее, и она скомпилируется.
источник
Мы достигли того же в Swift -Xcode 7.2, используя Parent View Controller и Child view controller (Наследование).
Файл - Новый - Класс Touch Какао - ParentViewController.
Сделайте дочерние контроллеры представления и свяжитесь с StoryBoard VC, добавьте textLabel.
ИЛИ Создайте пользовательский класс UILabel (метод подкласса) и свяжите с ним необходимые метки.
Примечание. Шрифт и цвет, объявленные в Parent VC, реализованы в CustomFontLabel. Преимущество в том, что мы можем изменить свойства uilabel / любого представления вместе в некоторых простых изменениях в Parent VC.
2) «для» зацикливания UIView для подвидов. Работает только на конкретном ВК.
источник