May 24, 2024

68. Адаптивный шрифт в SwiftUI

SwiftUI по умолчанию поддерживает dynamic font, достаточно использовать стандартные шрифты типа .font(.title), и все будет красиво. В этой статье на примере реального проекта покажу как настроить кастомный шрифт, чтобы он автоматически адаптировался к настройкам размера шрифта на девайсе.

С чего начинаем

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

Код для текстовой вьюхи

private var agreementAndPolicyDisclaimerView: some View {
  Text(.init(authDisclaimer))
    .foregroundStyle(.dtContentSecondary)
    .font(.calloutReg) // <- тут настриваем шрифт
    .frame(maxWidth: .infinity, alignment: .leading)
    .tint(.dtAccentBlue)
    .padding(.horizontal, 20)
}

Код для шрифта

public static var calloutReg: Font {
  Font(UIFont.calloutReg)
}

UIFont.calloutReg - это экстеншен для обращения к шрифту с использованием этого инициализатора, ничего хитрого.

К чему приходим

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

Новый код для шрифта

public static var calloutReg: Font {
  .custom(UIFont.font1RegularName, size: 14)
}

Все очень просто - используем этот инициализатор, а передаем в него название шрифта и размер, прямо как в случае с UIFont.

Дополнительно

Если у вас минимальный таргет iOS 14 или выше, то можно использовать еще один инициализатор, чтобы более точно настроить стиль шрифта (при необходимости).

Заключение

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

Рекомендую ознакомиться с официальной статьей от Apple, там больше деталей.

Другие мои статьи можно почитать тут.