swift - iOS SwiftUI 更改每个视图的默认字体
问题描述
我正在尝试为我的应用程序中的每个视图更改SwiftUI中的默认字体。
我要避免的是每次都像这样设置它:
.font(.custom("FONT_NAME", size: 20))
我想要的是对所有 Text 视图只更改一次,最重要的是,我想继续使用修饰符:
.font(.caption)
无需将文本视图重置为系统字体。
但是我还是没有找到任何解决方案,有人有吗?
解决方案
您可以构建自己的视图修改器。你可以为里面的每个 UIFont.TextStyle 定义你想使用的大小和字体private var fontDescriptions:
。
现在你可以像这样在你的视图上调用这个修饰符。Text("my text").customFont(.headline)
请记住,这也实现了字体缩放功能。
如果你想成为铁杆,你也可以将你的“customFont”函数称为“字体”。
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),
...
]
推荐阅读
- python - 在熊猫的csv文件中选择一些列
- sql - 需要帮助来编写查询
- c# - 将标量值 SQL 函数映射到方法
- python-3.x - 如何用 RSA 算法处理大整数
- c# - 如何使用 identityserver 4 注销客户端?
- javascript - Angular - LocalStorage 启动时为空,刷新时填充(F5)
- sql - 如何根据 sysdate 获取过去一年的不同日期范围
- ruby - 如何在单个 CLI 命令中本地执行托管在 github 上的 ruby 脚本
- php - 如何在没有连接列的情况下映射一对一关系(实体通过它们的 ID 连接)?
- java - 如何获取Jtable中选定行的值