SwiftUI: пользовательский шрифт с поддержкой полужирного и курсивного начертаний.

Я хочу создать собственный шрифт для использования в моем приложении SwiftUI. Я создал Font расширение:

static var acBody1: Font {
    return .custom("SuisseIntl", size: 17, relativeTo: .body)
}
static var acBody1Semibold: Font {
    return .custom("SuisseIntl-SemiBold", size: 17, relativeTo: .body)
}

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

Font.acBody1.semibold()

... аналогично тому, как используются собственные шрифты. У меня есть что-то подобное в UIKit. Я ссылаюсь на размер используемого шрифта, а затем возвращаю полужирный шрифт этого размера. Но насколько я могу судить, вы не можете получить pointSize шрифта SwiftUI после его создания. И поэтому я не уверен, как сделать цепочку модификаторов semibold.

Это возможно?


person RyJ    schedule 10.06.2021    source источник
comment
просто установите его вес вместо этого   -  person Leo Dabus    schedule 10.06.2021
comment
Но тогда пользователю нужно будет знать точный вес для полужирного шрифта.   -  person RyJ    schedule 10.06.2021
comment
На самом деле, выполнение Font.acBody1.weight(.semibold) действительно работает ... Я просто надеялся на что-нибудь более лаконичное.   -  person RyJ    schedule 11.06.2021
comment
Это твой ответ? stackoverflow.com/a/67700447/14733292   -  person Raja Kishan    schedule 11.06.2021


Ответы (1)


Это может помочь?

extension Font {
    
    static var acBody1: Font {
        return .custom("SuisseIntl", size: 17, relativeTo: .body)
    }
    public func semibold() -> Font {
        switch self {
        case .acBody1:
            return .custom("SuisseIntl-SemiBold", size: 17, relativeTo: .body)
        default:
            return self
        }
    }
}

Предложение: В зависимости от варианта использования вы можете изменить регистр default, чтобы он возвращал self.weight(.semibold), чтобы функция semibold() всегда возвращала semi-bolded шрифт.

person cedricbahirwe    schedule 10.06.2021
comment
Это именно то, что мне нужно! Огромное спасибо! - person RyJ; 11.06.2021