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

iOS 15+适配:带动态缩放的圆角字体实现方案问询

iOS15+ 圆角动态字体解决方案

要在iOS15+实现带动态缩放的自定义字号圆角字体,可以通过结合UIKit的UIFont和UIFontMetrics来实现,完全兼容iOS15,同时满足自由控制字号、支持动态缩放、使用圆角设计的需求。

实现自定义Font扩展

创建一个SwiftUI的Font扩展,封装圆角动态字体的生成逻辑:

import SwiftUI

extension Font {
    /// 创建支持动态缩放的圆角字体
    /// - Parameters:
    ///   - size: 基准字号(未缩放时的字号)
    ///   - weight: 字体权重,默认常规
    ///   - textStyle: 动态缩放的基准文本样式,默认匹配body样式的缩放比例
    static func rounded(size: CGFloat, weight: Font.Weight = .regular, textStyle: UIFont.TextStyle = .body) -> Font {
        // 转换SwiftUI权重为UIKit权重
        let uiWeight: UIFont.Weight = {
            switch weight {
            case .ultraLight: return .ultraLight
            case .thin: return .thin
            case .light: return .light
            case .regular: return .regular
            case .medium: return .medium
            case .semibold: return .semibold
            case .bold: return .bold
            case .heavy: return .heavy
            case .black: return .black
            default: return .regular
            }
        }()
        
        // 创建带圆角设计的基础字体
        let baseFont = UIFont.systemFont(ofSize: size, weight: uiWeight, design: .rounded)
        // 生成支持动态缩放的字体
        let scaledFont = UIFontMetrics(forTextStyle: textStyle).scaledFont(for: baseFont)
        
        return Font(scaledFont)
    }
}

使用方式

直接调用自定义的rounded方法,指定基准字号和权重即可:

Text("Hello, Dynamic Rounded Font")
    .font(.rounded(size: 16, weight: .medium))

如果需要让字体按照特定系统文本样式的比例缩放(比如标题样式的缩放幅度),可以指定textStyle参数:

Text("Hello, Title-scaled Rounded Font")
    .font(.rounded(size: 20, weight: .bold, textStyle: .title1))

原理说明

  • UIFont.systemFont(ofSize:weight:design:):iOS13+支持,可直接创建带.rounded设计的字体;
  • UIFontMetrics:iOS11+可用,能根据用户的系统字体大小偏好自动缩放字体,实现动态适配;
  • 转换为SwiftUI的Font:通过Font(scaledFont)将UIKit字体桥接到SwiftUI,完美兼容iOS15+。

这个方案既解决了固定字号不支持缩放的问题,又摆脱了系统预设文本样式的字号限制,同时兼容iOS15及更低版本(只要不低于iOS13)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:55:17