将系统设置为始终使用圆角字体?
Posted
技术标签:
【中文标题】将系统设置为始终使用圆角字体?【英文标题】:Set System to always use Rounded Font? 【发布时间】:2019-11-10 15:55:30 【问题描述】:在 SwiftUI 中,有没有办法让系统字体的圆角版本成为所有样式的默认值?我正在为应用程序中的所有文本使用其中一种系统样式(.body、.title、.headline 等)。
例如,我可以在单个文本视图上使用它
Text("some text")
.font(.system(.body, design: .rounded))
我想避免像这样更新我的应用程序中的每个文本视图和字段。有没有办法告诉环境默认使用圆角设计?
【问题讨论】:
我提到了@Environment(\.font),但它显示为只读 【参考方案1】:这里是如何在根视图中设置环境字体,默认情况下所有子视图都会有它。
var body: some View
NavigationView
VStack
NavigationLink(destination: Text("Details"))
Text("Link")
Text("Tap on image to find details")
.environment(\.font, Font.system(.body, design: .rounded))
【讨论】:
这会为视图中的所有文本设置一个默认字体。我正在寻找一种始终使用圆形设计的方法,无论我使用哪种风格。这不会那样做。 我喜欢这个答案的简单性。但是,导航栏中的Text
-Views 不会更改为新字体。并且以下方法会导致Text
不再符合字符串协议的错误。 .navigationBarTitle(Text("Title").environment(\.font, Font.custom(Fonts.plex, size: 28)))
任何想法如何在系统范围内更改字体?【参考方案2】:
您可以在 Font
上创建一个扩展,该扩展具有自动将设计设置为圆角的功能,同时仍允许您设置 TextStyle
extension Font
static func roundedFont(_ style: Font.TextStyle) -> Font
Font.system(style, design: .rounded)
然后你会这样使用它:
struct ContentView: View
var body: some View
Text("Hello").font(.roundedFont(.body))
【讨论】:
我仍然需要更新应用程序中使用文本样式的每个视图,所以我看不出这将如何解决我的问题。 我不认为有办法做你想做的事。我不认为你可以覆盖系统字体【参考方案3】:您可以在Font
上创建一个扩展,如下所示
-
参数字体
size
& weight
参数字体TextStyle
extension Font
static func roundedFont(WithSize size: CGFloat, AndWeight weight:Weight) -> Font
return Font.system(size: size, weight: weight, design: .rounded)
static func roundedFont(_ style: Font.TextStyle) -> Font
return Font.system(style, design: .rounded)
你可以这样调用:
- Text("Hello").font(Font.roundedFont(WithSize: 15.0, AndWeight: .bold))
- Text("Hello").font(Font.roundedFont(.body))
【讨论】:
以上是关于将系统设置为始终使用圆角字体?的主要内容,如果未能解决你的问题,请参考以下文章