首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改字体和字距的ViewModifier

更改字体和字距的ViewModifier
EN

Stack Overflow用户
提问于 2021-12-01 08:49:38
回答 1查看 56关注 0票数 1

我正在尝试更改SwiftUI中的字体和文本跟踪。到目前为止,我已经为设置跟踪的文本创建了一个扩展。

代码语言:javascript
复制
extension Text {
    func setFont(as font: Font.MyFonts) -> Self {
        self.tracking(font.tracking)
    }
}

我还创建了一个View修饰符,用于从枚举中设置正确的字体

代码语言:javascript
复制
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上设置。有没有什么聪明的方法可以把它们结合起来,这样我就只能设置视图修饰符了?

字体的枚举如下所示

代码语言:javascript
复制
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
            }
        }
    }

这是我正在使用的应用程序字体名称结构

代码语言:javascript
复制
public struct AppFontName {

    static let book = "Any custom font name"
    static let book_cursive = "any custom font name cursive"
}
EN

回答 1

Stack Overflow用户

发布于 2021-12-01 09:27:48

对于遗漏的.custom,我仍然有一些错误,但不管怎么说,您的代码的解决方案似乎是使用自己的Text.font而不是View.font,比如

代码语言:javascript
复制
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))
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70181312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档