更改标签栏标签的字体?

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

我正在尝试在我的 SwiftUI 应用程序中实现自定义字体 (OpenSans)。

我的大多数视图都很乐意采用该字体,因此我知道它正在从捆绑包中正确加载。但是,有几个地方存在问题。

第一个是导航栏,但我可以使用外观代理修改

titleTextAttributes
字典来解决这个问题。

另一个有问题的部分,也是我尚未解决的部分,标签栏按钮。无论我尝试在哪里修改字体,它似乎都不起作用 - 也许 TabView API 内部正在修改字体?这是我尝试过的(我使用 SwiftGen 作为资源访问器):

  • 将字体修改器应用到由

    Label
    修改器提供的
    tabItem
    视图 (
    TabView {
        Text("My tab content here...")
            .tabItem {
                Label(
                    title: {
                        Text(SFAssetVerificationUI.L10n.audits)
                            .font(FontFamily.OpenSans.extraBold.swiftUIFont(fixedSize: 18))
                    },
                    icon: { SFAssetVerificationUI.Asset.icTabAudits.swiftUIImage }
                )
            }
    }
    
  • 将字体修改器应用到作为

    Label
    视图的
    label
    参数提供的
    Tab
    视图 (>=iOS 18)。

    TabView {
        Tab(
            content: {
                Text("My tab content here...")  
            },
            label: {
                Label(
                    title: {
                        Text(SFAssetVerificationUI.L10n.audits)
                            .font(FontFamily.OpenSans.extraBold.swiftUIFont(fixedSize: 18))
                    },
                    icon: { SFAssetVerificationUI.Asset.icTabAudits.swiftUIImage }
                )
            }
        )
    }
    
  • 将上述两个

    Label
    视图替换为包含
    VStack
    视图和
    Image
    视图的
    Text

    TabView {
        Tab(
            content: {
                Text("My tab content here...")  
            },
            label: {
                VStack {
                    SFAssetVerificationUI.Asset.icTabAudits.swiftUIImage
                    Text(SFAssetVerificationUI.L10n.audits)
                        .font(FontFamily.OpenSans.extraBold.swiftUIFont(fixedSize: 18))
                }
            }
        )
    }
    
  • titleTextAttributes
    外观代理上设置
    UITabBarItem
    ,适用于
    normal
    selected
    状态。

    UITabBarItem.appearance().setTitleTextAttributes([.font: FontFamily.OpenSans.extraBold.font(size: 18)], for: .normal)
    UITabBarItem.appearance().setTitleTextAttributes([.font: FontFamily.OpenSans.extraBold.font(size: 18)], for: .selected)
    
ios swift swiftui uikit swiftui-tabview
1个回答
0
投票

为 UITabBar 项目设置自定义字体确实很棘手,因为 SwiftUI 中的 TabView 不提供直接的 API 来自定义 UITabBarItems 上的字体。然而,使用 UITabBarItem.appearance() 来设置字体通常是推荐的方法。这是一个快速解决方案:

确保您的 OpenSans 字体已在项目中正确注册。 应用 UITabBarItem.appearance() 全局设置字体。 具体方法如下:

import SwiftUI

@main
struct MyApp: App {
    init() {
        // Set custom font for UITabBarItem appearance
        let customFont = UIFont(name: "OpenSans-ExtraBold", size: 18)!
        
        UITabBarItem.appearance().setTitleTextAttributes([.font: customFont], for: .normal)
        UITabBarItem.appearance().setTitleTextAttributes([.font: customFont], for: .selected)
    }

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

struct ContentView: View {
    var body: some View {
        TabView {
            Text("My tab content here...")
                .tabItem {
                    Label("Audits", systemImage: "doc.text")
                }
            Text("Another tab content")
                .tabItem {
                    Label("Reports", systemImage: "chart.bar")
                }
        }
    }
}

此方法应该适用于 iOS 17 之前的 iOS 版本(包括 iOS 17)。对于 iOS 18+,SwiftUI 的本机 API 可以直接在 TabView 中提供更大的灵活性。

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