Я пытаюсь добиться динамического типа для текстовых меток в SwiftUI. Я использую собственный шрифт и хочу иметь возможность ограничить динамический тип размерами контейнера (шириной и высотой).
Я уже использовал модификатор шрифта следующим образом:
Я уже использовал модификатор шрифта следующим образом:
p>
Код: Выделить всё
.font(dynamicScaling ? .custom(style.name, size: style.size, relativeTo: style.dynamicTypeMapping) : .custom(style.name, fixedSize: style.size))
Код: Выделить всё
protocol TextModifier {
associatedtype Body: View
func body(text: Text) -> Body
}
struct Style: TextModifier {
var typography: StyleType
var dynamicScaling: Bool = true
var style: FontStyle {
return FontStyleManager.style(style: typography)
}
func body(text content: Text) -> some View {
return content
.font(dynamicScaling ? .custom(style.name, size: style.size, relativeTo: style.dynamicTypeMapping) : .custom(style.name, fixedSize: style.size)) // fixedSize is to disable the dynamic scaling completely
.underline(style.underlineDecoration)
.lineSpacing(((style.lineHeight / style.fontHeight) * style.fontHeight) - style.fontHeight)
}
}
extension Text {
func modifier(_ theModifier: TM) -> some View {
return theModifier.body(text: self)
}
public func style(style: StyleType, dynamicScaling: Bool = true) -> some View {
modifier(Style(typography: style, dynamicScaling: dynamicScaling))
}
Когда динамическое масштабирование включено и я увеличиваю параметр «Доступность -> Большой текст», текст выходит за пределы контейнера и увеличивает размер контейнера. высота/ширина.
Текст среднего размера выглядит следующим образом:
[img]https://i.sstatic.net /IEeZQtWk.png[/img]
Когда я увеличиваю настройку «Крупный текст», шрифт увеличивается:

Как можно Я достиг этого?
Подробнее здесь: https://stackoverflow.com/questions/785 ... -dimension