如何在 SwiftUI 应用级别设置默认字体

问题描述 投票:0回答:1

我编写了一款适合我在 iPad 上使用的家庭预算应用程序,这也是我最初打算使用它的地方。我现在想我可以将应用程序扩展到 iPhone 并学习如何在两者之间同步数据库。

我面临的最大障碍似乎是我在许多(大多数)页面上使用“title2”字体。我进行了实验,发现在 iPhone 上,如果我在使用“title2”的地方使用“副标题”,页面看起来不错。

我认为我可以在 Main.app 级别设置应用程序默认字体,然后删除页面上对 .font() 的特定引用,而不是在每个页面上放置 case 或 if 逻辑

如果设备是 iPad,我想将默认字体设置为“title2”;如果设备是 iPhone,则将默认字体设置为“subheadline”。

我已经了解了如何获取设备类型

import SwiftUI

@main
struct ManagingYourMoneyiPhoneApp: App {
    
        switch UIDevice.current.userInterfaceIdiom {
        case .pad:
            print("This is an iPad")

        case .phone:
            print("This is an iPhone")
        default:
            print("default")
        }
    }

    var body: some Scene {

        WindowGroup {
            ContentView()
        }
    }
}

但是我不清楚如何根据设备类型设置默认字体。

我见过一个例子

ContentView()
    .environment(\.font, Font.custom("CustomFont", size: 14))

但我似乎不知道如何有条件地实现这一点。

任何帮助将不胜感激。

ios swiftui fonts
1个回答
0
投票

通常您可能想让用户使用动态类型控制字体的大小,但如果在您的情况下您想控制它,您可以尝试这样的操作:

ContentView()
    .environment(\.font, Font.custom(.fontName, size: 14))

// …

private extension String {
    static var fontName: String {
        switch UIDevice.current.userInterfaceIdiom {
            // etc
        }
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.