And*_*tto 8 fonts text swift ios13 swiftui
我试图更改默认字体在SwiftUI在我的应用程序的每个视图。
我想避免的是每次都这样设置:
.font(.custom("FONT_NAME", size: 20))
Run Code Online (Sandbox Code Playgroud)
我想要的是为所有 Text 视图只更改一次,最重要的是,我想继续使用修饰符:
.font(.caption)
Run Code Online (Sandbox Code Playgroud)
无需将文本视图重置为系统字体。
但是我仍然没有找到任何解决方案,有人有吗?
您可以构建自己的视图修改器。您可以定义内部每个 UIFont.TextStyle 使用的大小和字体private var fontDescriptions:
。
现在您可以像这样在视图上调用此修饰符。Text("my text").customFont(.headline)
请记住,这个还实现了字体缩放功能。
如果你想成为硬核,你也可以将你的“customFont”函数称为“font”。
extension View {
func customFont(_ textStyle: UIFont.TextStyle) -> ModifiedContent<Self, CustomFont> {
return modifier(CustomFont(textStyle: textStyle))
}
}
struct CustomFont: ViewModifier {
let textStyle: UIFont.TextStyle
/// Will trigger the refresh of the view when the ContentSizeCategory changes.
@Environment(\.sizeCategory) var sizeCategory: ContentSizeCategory
func body(content: Content) -> some View {
guard let fontDescription = fontDescriptions[textStyle] else {
print("textStyle nicht vorhanden: \(textStyle)")
return content.font(.system(.body));
}
let fontMetrics = UIFontMetrics(forTextStyle: textStyle)
let fontSize = fontMetrics.scaledValue(for: fontDescription.1)
return content.font(.custom(fontDescription.0, size: fontSize))
}
}
/// Define the custom fonts to use, depending on the TextStyle.
typealias CustomFontDescription = (String, CGFloat)
private var fontDescriptions: [UIFont.TextStyle: CustomFontDescription] = [
.headline: ("MYFONT", SIZE),
.subheadline: ("MYFONT", SIZE),
...
]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3372 次 |
最近记录: |