Добавьте новый шрифт в свое приложение для iOS сегодня

Некоторое время назад мы заглянули в Dynamic Type с системным шрифтом. На этот раз мы собираемся проверить, как использовать динамический тип с настраиваемым шрифтом в наших приложениях для iOS. Apple предоставляет отличные API-интерфейсы, чтобы сделать наши приложения доступными, даже если мы используем собственные стили шрифтов.

Добавить собственный шрифт в приложение

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

Нам нужно добавить файл шрифта в проект приложения Xcode. В настоящее время поддерживаются файлы шрифтов True Type (.ttf) и Open Type (.otf). Просто перетащите файлы в свой проект XCode. Будьте осторожны и выберите цели, в которых вы хотите использовать этот шрифт:

Если вы забудете добавить шрифт к определенному целевому членству в вашем проекте Xcode, вы столкнетесь с проблемой, когда файл шрифта не будет найден:

Чтобы исправить это, просто установите флажок и добавьте его в назначенную цель:

После этого перейдите к файлу Info.plist и добавьте новую запись с ключом Fonts provided by application. Здесь нам нужно предоставить массив со всеми файлами шрифтов, которые мы добавили в проект.

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

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

Использовать собственный шрифт с динамическим типом

Чтобы использовать динамический тип с пользовательскими шрифтами, нам нужно использовать UIFontMetrics. Это служебный объект, который помогает получить пользовательские шрифты, масштабируемые в соответствии с размером текста и настройками специальных возможностей. Другими словами, этот класс помогает нам отображать настраиваемый шрифт с учетом пользовательского шрифта и настроек доступности.

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

Допустим, мы добавили ярлык с большим заголовком. Это означает, что нам нужно использовать шрифт размером 34 пункта. Затем мы используем UIFontMetrics и инициализируем экземпляр для определенного стиля текста. В конце мы устанавливаем шрифт для нашей метки с помощью функции scaledFont и предоставляем собственный шрифт:

Обновление при изменении размера текста

Чтобы проверить, как все работает, мы можем включить размер текста в Xcode Environment Overrides:

Если вы его измените, вы увидите, что в нашем приложении ничего не происходит. Чтобы включить автоматическое изменение, нам нужно установить adjustsFontForContentSizeCategory. Он указывает, что объект должен автоматически обновлять свой шрифт при изменении категории устройства.

label.adjustsFontForContentSizeCategory = true

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

TL;DR

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

Ресурсы