ios跟随系统设置字体大小

这些Swift代码扩展了UILabel,UIButton,UITextField和UITextView,定义了`applyGlobalTextStyle`方法,用于根据系统设定的文字样式调整组件的字体大小。方法首先获取默认字体,然后使用UIFontMetrics进行缩放,确保字体在不同内容大小类别下自适应。应用此方法的组件会自动根据系统字体变化更新显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

extension UILabel {
    func applyGlobalTextStyle() {
        let font = self.font ?? UIFont.preferredFont(forTextStyle: .body)
        let fontMetrics = UIFontMetrics(forTextStyle: .body)
        let scaledFont = fontMetrics.scaledFont(for: font)
        self.font = scaledFont
        self.adjustsFontForContentSizeCategory = true
    }
}

extension UIButton {
    func applyGlobalTextStyle() {
        let font =  self.titleLabel?.font ?? UIFont.preferredFont(forTextStyle: .body)
        let fontMetrics = UIFontMetrics(forTextStyle: .body)
        let scaledFont = fontMetrics.scaledFont(for: font)
        self.titleLabel?.font = scaledFont
        self.titleLabel?.adjustsFontForContentSizeCategory = true
    }
}

extension UITextField {
    func applyGlobalTextStyle() {
        let font = self.font ?? UIFont.preferredFont(forTextStyle: .body)
        let fontMetrics = UIFontMetrics(forTextStyle: .body)
        let scaledFont = fontMetrics.scaledFont(for: font)
        self.font = scaledFont
        self.adjustsFontForContentSizeCategory = true
    }
}


extension UITextView {
    func applyGlobalTextStyle() {
        let font = self.font ?? UIFont.preferredFont(forTextStyle: .body)
        let fontMetrics = UIFontMetrics(forTextStyle: .body)
        let scaledFont = fontMetrics.scaledFont(for: font)
        self.font = scaledFont
        self.adjustsFontForContentSizeCategory = true
    }
}

上面的方法会基于自己设置的字体大小,然后根据系统设置的字体大小进行计算得到最终的字体大小。

使用方法:

   lazy var subTitleLabel:UILabel = {
        var label = UILabel()
        label.numberOfLines = 2
        label.font = UIFont.systemFont(ofSize: 14.0)
        label.textColor = UIColor.color999
        label.applyGlobalTextStyle()
        return label
    }()

 label.applyGlobalTextStyle()

  label.font = UIFont.systemFont(ofSize: 14.0),为初始值,系统更改字体后回到App页面就会刷新字体大小

### 微信小程序字体大小根据系统设置自适应调整的方法 在微信小程序开发中,为了使界面更加友好并适配不同用户的偏好,可以实现字体大小系统设置的变化而动态调整的功能。以下是具体实现方式: #### 使用 `px` 和 `rpx` 的区别 在微信小程序中,布局单位通常使用 `rpx`(responsive pixel),它是一种相对于屏幕宽度的相对单位[^1]。当开发者希望字体能够随着屏幕尺寸变化时,推荐优先使用 `rpx` 单位来定义字体大小。 ```css /* wxss 文件 */ .text { font-size: 32rpx; } ``` 然而,仅依赖于 `rpx` 并不足以完全满足需求,因为这仅仅考虑了屏幕物理分辨率的影响,而不涉及用户手动更改系统字体大小的情况。 --- #### 启用系统字体缩放功能 为了让字体真正跟随系统的字体设置进行调整,需要启用 **根节点字体缩放** 功能。可以通过配置 `app.json` 或页面级 JSON 来开启此选项: ```json { "window": { "enableScroll": true, "disableSwipe": false, "fontSizeSetting": true // 开启系统字体大小设置支持 } } ``` 上述代码中的 `"fontSizeSetting"` 属性允许用户通过手机上的「显示」或「辅助功能」菜单调节全局字体大小,从而影响到小程序内的文本展示效果[^2]。 --- #### 结合媒体查询优化体验 尽管开启了系统字体缩放能力,但在某些特殊场景下可能还需要额外定制化逻辑才能达到最佳视觉呈现。此时可借助 CSS 媒体查询进一步细化控制规则: ```css /* 默认情况下的基础样式 */ .text-default { font-size: 28rpx; } /* 当检测到大号字体模式启动时应用更大字号 */ @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { .text-large-mode { font-size: 40rpx !important; } } ``` 注意这里利用的是微软专有属性 `-ms-high-contrast:` 进行模拟测试;实际项目应替换为针对 iOS/Android 设备的有效条件语句[^3]。 --- #### 实际案例分析 假设存在这样一个需求——列表项标题需响应式增长至两倍原始规格以匹配高对比度主题环境,则完整的解决方案如下所示: ```html <!-- wxml --> <view class="item"> <text class="{{isLargeFont ? 'title-large' : 'title-normal'}}">{{itemName}}</text> </view> ``` ```javascript // js文件部分业务逻辑判断 Page({ data:{ isLargeFont:false, // 初始状态设为标准字型 itemName:"示例名称" }, onLoad:function(){ const systemInfo=wx.getSystemInfoSync(); if(systemInfo.screenWidth>=768 || systemInfo.fontScale>1){ this.setData({isLargeFont:true}); }else{ this.setData({isLargeFont:false}); } } }) ``` 以上脚本片段展示了如何依据获取到的实际运行参数决定最终渲染结果[^4]。 --- #### 总结说明 综上所述,要达成让微信小程序内部使用的字体能依照终端所设定好的比例相应变动的目标,主要途径包括但不限于采用灵活的比例测量体系 (`rpx`)、激活内置的支持机制(`fontSizeSetting`)以及引入高级的选择器技术(media queries)三方面共同协作完成整个过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值