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

如何设置UILabel字号保持静态不受iOS系统字体设置影响?

iOS固定UILabel字号不受系统设置影响的配置方案

要实现UILabel字号不跟随系统无障碍字体缩放、不随Zoomed放大模式变动,按以下场景配置即可:

1. 屏蔽动态类型(无障碍大字体)的自动缩放

系统自动调大字号的核心原因是控件开启了动态类型适配,分开发模式配置:

  • 纯代码开发场景
    • 不要使用动态字体初始化方法UIFont.preferredFont(forTextStyle:),直接使用固定pointSize的方法初始化字体:
      // 固定16号系统字体,不会随系统字体设置变动
      yourLabel.font = UIFont.systemFont(ofSize: 16)
      
    • 显式关闭字体自动自适应属性,避免全局配置或者第三方库误开:
      yourLabel.adjustsFontForContentSizeCategory = false
      
  • Storyboard/Xib可视化开发场景
    • 选中目标UILabel,在属性检查器的Font选项中,不要选择Text Styles分类下的动态字体样式,直接选择System(系统字体)或者自定义字体,手动填入需要的固定字号
    • 取消勾选Font选项下方的Automatically Adjusts Font复选框,关闭动态类型自动适配

2. 屏蔽Zoomed In放大模式的字号变动

正常情况下使用上述固定字号配置后,放大模式不会修改你代码里写死的字号point值,如果出现字号随放大模式变动的异常,按以下点排查:

  • 检查是否在traitCollectionDidChange:回调中,根据当前视图的size class、displayScale主动修改了UILabel的字号
  • 检查项目中是否有UIFont的分类、第三方库通过swizzle交换了字体初始化方法,自动给所有字体加上了放大模式的缩放系数,去掉对应逻辑即可

3. 老项目全局兜底方案

如果是存量项目不想逐个修改控件配置,可以通过UILabel分类实现全局字号锁定,适合临时快速修复场景:

import UIKit

extension UILabel {
    func forceLockFontSize(fixedSize: CGFloat) {
        self.adjustsFontForContentSizeCategory = false
        self.font = self.font.withSize(fixedSize)
    }
}

注意:从无障碍合规角度,不建议对App内所有文本全局固定字号,会影响视障用户的正常使用,仅在相机水印、弹窗固定标识等必须保持字号不变的特殊场景使用上述配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:30:50