См. здесь размеры динамического шрифта Apple.
Я хочу использовать динамический размер шрифта, чтобы текст в моем приложении масштабировался в соответствии с настройками специальных возможностей. Однако размеры pt по умолчанию не соответствуют тому, что мне нужно.
Например.:
Название 1 — 28 баллов
Название 2 — 22 балла
Я хочу иметь возможность использовать шрифт 24pt с динамическим размером. С настройкой Large (по умолчанию) это невозможно... но если у пользователя есть настройка xLarge, Title 2
фактически масштабируется до 24pt...
Поскольку я ориентируюсь на iOS 15, я использую эти модификаторы на моем Text
, поэтому я могу использовать закругленный шрифт с динамическим размером:
.font(.system(.title2, design: .rounded))
.fontWeight(.regular)
Я искал и искал, но ни один из предложенных ответов не работает для меня. Мне нравится идея масштабировать существующие размеры динамического шрифта с помощью множителя, но если я использую .scaleEffect(value)
, это создает пикселизацию при увеличении и портит отступы даже при уменьшении.
Вы можете создать шрифт с настраиваемым размером точек, который масштабируется с другими динамическими шрифтами, используя:
Font.custom(_:size:relativeTo:)
например
struct ContentView: View {
var body: some View {
VStack(alignment: .leading) {
Text("Title").font(.title).border(.green)
Text("Title").font(.title1½).border(.blue)
Text("Title").font(.title2).border(.red)
}
}
}
extension Font {
static let title1½ = Font.custom("", size: 24, relativeTo: .title2)
}
(если оставить name
пустым, кажется, что возвращается системный шрифт)
Вы можете адаптировать это для использования закругленных шрифтов в iOS 15. Сначала вам нужно найти имя самого шрифта, используя UIKit:
let font = UIFont.systemFont(ofSize: 24, weight: .regular)
let fontDescriptor = font.fontDescriptor.withDesign(.rounded)!
let roundedFont = UIFont(descriptor: fontDescriptor, size: 24)
print(roundedFont.fontName)
// .AppleSystemUIFontRounded-Regular
Вы можете использовать это в своем собственном методе Font:
extension Font {
static let title1Rounded = Font.custom(".AppleSystemUIFontRounded-Regular", size: 28, relativeTo: .title)
static let title1½Rounded = Font.custom(".AppleSystemUIFontRounded-Regular", size: 24, relativeTo: .title2)
static let title2Rounded = Font.custom(".AppleSystemUIFontRounded-Regular", size: 22, relativeTo: .title2)
}
Фантастика, спасибо! Напишите ответ и здесь: stackoverflow.com/questions/72299093/…
Спасибо, это кажется отличным и работает хорошо. Только одно — как я могу установить дизайн шрифта на
rounded
? Поскольку я ориентируюсь на iOS 15, я не могу использовать.fontDesign(.rounded)
и не могу найти способ добавить его в качестве параметра с помощью.custom(...