我正在尝试更改SwiftUI中的字体和文本跟踪。到目前为止,我已经为设置跟踪的文本创建了一个扩展。
extension Text {
func setFont(as font: Font.MyFonts) -> Self {
self.tracking(font.tracking)
}
}我还创建了一个View修饰符,用于从枚举中设置正确的字体
extension Text {
func font(_ font: Font.MyFonts) -> some View {
ModifiedContent(content: self, modifier: MyFont(font: font))
}
}
struct MyFont: ViewModifier {
let font: Font.MyFonts
func body(content: Content) -> some View {
content
.font(.custom(font: font))
}
}
static func custom(font: MyFonts) -> Font {
return Font(font.font as CTFont)
}我似乎找不到任何方法来组合它们,因为视图修饰符返回some View,并且跟踪只能在Text上设置。有没有什么聪明的方法可以把它们结合起来,这样我就只能设置视图修饰符了?
字体的枚举如下所示
extension Font {
enum MyFonts {
case huge
case large
case medium
/// Custom fonts according to design specs
var font: UIFont {
var font: UIFont?
switch self {
case .huge: font = UIFont(name: AppFontName.book, size: 40)
case .large: font = UIFont(name: AppFontName.book, size: 28
case .medium: font = UIFont(name: AppFontName.book_cursive, size: 18)
}
return font ?? UIFont.systemFont(ofSize: 16)
}
var tracking: Double {
switch self {
case .huge:
return -0.25
default:
return 0
}
}
}这是我正在使用的应用程序字体名称结构
public struct AppFontName {
static let book = "Any custom font name"
static let book_cursive = "any custom font name cursive"
}发布于 2021-12-01 09:27:48
对于遗漏的.custom,我仍然有一些错误,但不管怎么说,您的代码的解决方案似乎是使用自己的Text.font而不是View.font,比如
extension Text {
// func font(_ font: Font.MyFonts) -> some View {
// ModifiedContent(content: self, modifier: MyFont(font: font))
// }
func font(_ font: Font.MyFonts) -> Self {
self.font(Font.custom(font: font))
}
}https://stackoverflow.com/questions/70181312
复制相似问题