如何在SwiftUI中将.fontWeight添加为ViewModifier的一部分
我正在尝试创建ViewModifier来保存SwiftUI中的所有类型样式。尝试添加.fontWeight修改器时,出现以下错误:如何在SwiftUI中将.fontWeight添加为ViewModifier的一部分,swiftui,Swiftui,我正在尝试创建ViewModifier来保存SwiftUI中的所有类型样式。尝试添加.fontWeight修改器时,出现以下错误: 类型“some View”的值没有成员“fontwweight” 这可能吗?在我的SwiftUI项目中,有没有更好的方法来管理类型样式 struct H1: ViewModifier { func body(content: Content) -> some View { content .foregroundC
类型“some View”的值没有成员“fontwweight”
这可能吗?在我的SwiftUI项目中,有没有更好的方法来管理类型样式
struct H1: ViewModifier {
func body(content: Content) -> some View {
content
.foregroundColor(Color.black)
.font(.system(size: 24))
.fontWeight(.semibold)
}
}
您可以通过在文本上的扩展中声明函数来实现这一点,如下所示:
extension Text {
func h1() -> Text {
self
.foregroundColor(Color.black)
.font(.system(size: 24))
.fontWeight(.semibold)
}
}
struct H1: ViewModifier {
// system font, size 24 and semibold
let font = Font.system(size: 24).weight(.semibold)
func body(content: Content) -> some View {
content
.foregroundColor(Color.black)
.font(font)
}
}
要使用它,只需调用:
Text("Whatever").h1()
像…这样的怎么样
extension Text {
enum Style {
case h1, h2 // etc
}
func style(_ style: Style) -> Text {
switch style {
case .h1:
return
foregroundColor(.black)
.font(.system(size: 24))
.fontWeight(.semibold)
case .h2:
return
foregroundColor(.black)
.font(.system(size: 20))
.fontWeight(.medium)
}
}
}
然后你可以使用
Text("Hello, World!").style(.h1) // etc
字体的属性之一是
weight
,因此,您可以不将fontwweight
应用于文本,而是将权重应用于字体,然后将字体添加到文本中,如下所示:
extension Text {
func h1() -> Text {
self
.foregroundColor(Color.black)
.font(.system(size: 24))
.fontWeight(.semibold)
}
}
struct H1: ViewModifier {
// system font, size 24 and semibold
let font = Font.system(size: 24).weight(.semibold)
func body(content: Content) -> some View {
content
.foregroundColor(Color.black)
.font(font)
}
}
钻取
fontWeight
表示此修饰符仅适用于文本
。事实上,我也不知道这件事。这很烦人。我在形状视图中遇到了同样的问题。尚未找到解决方案:-(我尝试了各种类型的强制转换,但都没有成功。+1:我认为这是最好的解决方案,因为您不会试图通过避免使用ViewModifier来对抗SwiftUI架构。此外,您还可以将其用于任何“动态大小”字体,例如,我使用了Font.largeTitle.weight(.semibold)字体
在我的应用程序中。难道没有办法要求内容符合文本协议或类似协议吗?我考虑的是泛型类型。虽然选择的答案有效,但我认为这应该是正确的答案,因为它也使用类似于此解决方案的ViewModifier来解决答案!