You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Swift/SwiftUI中如何设置数字小数部分的字号小于整数部分

实现方案

你当前直接使用单个Text组件渲染完整金额字符串,所以所有文本字号统一。只需将格式化后的金额按小数点拆分,分别为整数部分、小数部分设置不同字号后拼接为富文本即可实现需求。你可以根据设计要求调整小数部分的字号和baselineOffset的偏移值,实现更贴合的对齐效果:

完整修改后代码

import SwiftUI

struct BalanceDetailsView: View {
    //MARK: - PROPERTIES
    var balance: Float
    var balanceString: String {
        return balance.formattedWithSeparator
    }
    //MARK: - BODY
    var body: some View {
        VStack{
            HStack{
                // 拆分金额为整数和小数部分
                let parts = balanceString.components(separatedBy: ".")
                let integerPart = parts.first ?? ""
                let decimalPart = parts.count > 1 ? parts[1] : "00"
                
                // 拼接不同字号的文本,baselineOffset调整小数部分对齐位置
                Text(integerPart)
                    .font(.custom(K.fonts.gilroyBold, size: 24))
                + Text(".\(decimalPart)")
                    .font(.custom(K.fonts.gilroyBold, size: 16)) // 可自定义小数部分字号
                    .baselineOffset(4) // 调整偏移量让小数与整数对齐
            }
            .multilineTextAlignment(.center)
            .padding(.top)
        }//: VSTACK
    }
}

struct BalanceDetailsView_Previews: PreviewProvider {
    static var previews: some View {
        BalanceDetailsView(balance: 43678)
            .previewLayout(.sizeThatFits)
    }
}

// 数字格式化扩展
extension Formatter {
    static let withSeparator: NumberFormatter = {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        // 最少保留2位小数,示例:2 显示为 2.00
        formatter.minimumFractionDigits = 2
        // 最多保留2位小数,示例:2.5021 显示为 2.50
        formatter.maximumFractionDigits = 2
        
        return formatter
    }()
}

extension Numeric {
    var formattedWithSeparator: String { Formatter.withSeparator.string(for: self) ?? "" }
}

效果对比

当前得到的结果期望实现的结果
当前实现效果期望实现效果

内容的提问来源于stack exchange,提问作者Rudkin99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:00:02