gpt4 book ai didi

swift - iOS SwiftUI 更改每个 View 的默认字体

转载 作者:行者123 更新时间:2023-12-01 09:59:59 25 4
gpt4 key购买 nike

我正在尝试更改 默认字体 SwiftUI 对于我的应用程序中的每个 View 。

我想避免的是每次都这样设置:

.font(.custom("FONT_NAME", size: 20))

我要的是只为所有 TextView 更改一次,最重要的是,我想继续使用修饰符:
.font(.caption)

无需将 TextView 重置为系统字体。

但是我仍然没有找到任何解决方案,有人有吗?

最佳答案

您可以构建自己的 View 修改器。您可以为 private var fontDescriptions: 中的每个 UIFont.TextStyle 定义要使用的大小和字体。 .

现在你可以像这样在你的 View 上调用这个修饰符。 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),
...
]

关于swift - iOS SwiftUI 更改每个 View 的默认字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58970976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com