[SwiftUI] Как установить пользовательский шрифт для NavigationBarTitle

Вам необходимо установить библиотеку Introspect.

Как использовать

Она должна быть использована в корне NavigationView. Если вы используете

NavigationView {
    VStack { ... }
        // ↓ set custom font
        .navigationTitleFont(font: UIFont.custom.extraBold(ofSize: 20))
}
Вход в полноэкранный режим Выйти из полноэкранного режима

3 Шаги

  1. Создайте модификатор ViewModifier
  2. Добавьте метод расширения к UIFont
  3. Добавьте метод расширения к представлению

Шаг 1: Создание модификатора вида

import SwiftUI
import Introspect

public struct NavigationTitleFontModifier: ViewModifier {
    public var font: UIFont

    public func body(content: Content) -> some View {
        content
            .introspectNavigationController {
                $0.navigationBar.titleTextAttributes = [.font:font]
            }
    }
}
Вход в полноэкранный режим Выход из полноэкранного режима

Шаг 2: Добавьте метод расширения к UIFont
В этом нет необходимости. Он нужен только для того, чтобы легко вызывать пользовательский шрифт.

extension UIFont {
    public struct custom {
        static func extraBold(ofSize size: CGFloat) -> UIFont {
            return UIFont(name: "BoldCustomFontName", size: size) ?? UIFont.systemFont(ofSize: size, weight: .bold)
        }
    }
}
Войти в полноэкранный режим Выход из полноэкранного режима

Шаг 3: Добавьте метод расширения к View

public extension View {
    func navigationTitleFont(font: UIFont) -> some View {
        self.modifier(NavigationTitleFontModifier(font: font))
    }
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий