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

Программируем под IOS
Ответить
Anonymous
 Это правильный способ сделать размеры шрифтов динамическими в SwiftUI?

Сообщение Anonymous »

Я пытаюсь создать расширение шрифта SwiftUI, которое динамически настраивает размеры шрифта в зависимости от ширины экрана устройства. Вот моя текущая реализация:

Код: Выделить всё

import SwiftUI

extension Font {
private static var referenceWidth: CGFloat { 393 } // iPhone 14/15 Pro width (pt)
private static var minScale: CGFloat { 0.45 }
private static var maxScale: CGFloat { 0.85 }

private static func scale(forBaseSize baseSize: CGFloat) -> CGFloat {
let screenWidth = UIScreen.main.bounds.width
let rawScale = screenWidth / referenceWidth
let clampedScale = max(minScale, min(rawScale, maxScale))
return baseSize * clampedScale
}

private static func customScaled(_ name: String, baseSize: CGFloat, relativeTo textStyle: Font.TextStyle = .body) -> Font {
let scaledSize = scale(forBaseSize: baseSize)
// Use `relativeTo:` so Dynamic Type (Accessibility) is respected
return .custom(name, size: scaledSize, relativeTo: textStyle)
}

static func responsiveSFComRegular(size: CGFloat, relativeTo textStyle: Font.TextStyle = .body) -> Font {
customScaled("SFProRounded-Regular", baseSize: size, relativeTo: textStyle)
}

static func responsiveSFComSemibold(size: CGFloat, relativeTo textStyle: Font.TextStyle = .body) -> Font {
customScaled("SFProRounded-Semibold", baseSize: size, relativeTo: textStyle)
}

static func responsiveSFComBold(size: CGFloat, relativeTo textStyle: Font.TextStyle = .body) -> Font {
customScaled("SFProRounded-Bold", baseSize: size, relativeTo: textStyle)
}

static func responsiveSFComMedium(size: CGFloat, relativeTo textStyle: Font.TextStyle = .body) -> Font {
customScaled("SFProRounded-Medium", baseSize: size, relativeTo: textStyle)
}
}

Мои вопросы:
Это хороший способ сделать шрифты динамическими в SwiftUI в зависимости от размера устройства?
Используется ли referenceWidth, например 393, для безопасного масштабирования, или это может вызвать проблемы на маленьких/больших устройствах?
Я также использую относительныйTo: textStyle — конфликтует ли это с масштабированием на основе устройства?
Есть ли лучшие шаблоны для обеспечения адаптивности шрифтов в SwiftUI?

Подробнее здесь: https://stackoverflow.com/questions/797 ... in-swiftui
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»