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

SwiftUI中如何设置字体范围(适配辅助功能字号调整)

在SwiftUI中限制动态字体的字号范围(14-34)

要精确限制辅助功能调整字号时的字体大小范围(14到34号),你可以通过两种方式实现,替代仅靠minimumScaleFactor的方案:

方法一:直接计算并钳制字体大小

通过监听系统动态字体的基准大小,将其钳制在14-34之间,确保无论系统辅助功能怎么调,字体都不会超出这个范围:

struct ContentView: View {
    @Environment(\.dynamicTypeSize) private var dynamicTypeSize
    
    private var clampedFontSize: CGFloat {
        // 获取系统默认body样式的字体大小
        let systemFontSize = UIFont.preferredFont(forTextStyle: .body).pointSize
        // 钳制到14-34区间
        return max(14, min(systemFontSize, 34))
    }
    
    var body: some View {
        VStack{
            Text("Test string")
                .font(.system(size: clampedFontSize))
                .frame(width: 150, height: 50)
        }
    }
}

这个方法的优势是精确控制字号数值,完全贴合你要的14-34范围。如果需要对不同文本样式(比如标题、副标题)设置不同范围,只需要修改preferredFont(forTextStyle:)的参数即可。

方法二:限制动态类型的等级范围

如果你更倾向于遵循系统的动态类型等级规范,可以限制允许的动态类型大小区间,对应到近似的字号范围:

struct ContentView: View {
    var body: some View {
        VStack{
            Text("Test string")
                // 限制动态类型从最小的xSmall到accessibility3(对应约34号字体)
                .dynamicTypeSize(.xSmall ... .accessibility3)
                .font(.body)
                // 关闭自动缩放,因为已经限制了范围
                .minimumScaleFactor(1)
                .frame(width: 150, height: 50)
        }
    }
}

这种方法的好处是符合Apple的无障碍设计规范,但字号是对应系统预设的等级,可能不是精确的14-34,你可以根据需求选择。

注意:minimumScaleFactor的作用是当文本容器空间不足时缩放字体,和限制系统动态字体的大小范围是两个不同的需求,所以上面的方案中我们要么直接控制字体大小,要么关闭了自动缩放。

内容的提问来源于stack exchange,提问作者New iOS Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:50:06