如何禁用react-native-picker/picker中Picker组件的字体缩放功能
@react-native-picker/picker 禁用字体缩放实现方案
可以根据项目实际情况选择以下几种实现方式,不需要依赖组件props列表里明确标注的字体缩放开关:
方案1:升级组件版本(改造成本最低)
最新稳定版的@react-native-picker/picker已经内置了allowFontScaling属性,直接在Picker组件上传递allowFontScaling={false},即可同时控制iOS、安卓双端的选中态文本、下拉选项文本不跟随系统字体缩放。这个属性没有出现在部分旧版本文档里是官方更新滞后导致的,实际从2.4.0版本开始就已经支持。方案2:单组件范围修改(不影响其他页面/组件的字体缩放逻辑)
如果暂时不能升级项目依赖,可以分端做适配:- 安卓端:把Picker的
mode设为"dropdown",传入renderDropdownItem属性自定义下拉选项渲染,自己写Text组件时加上allowFontScaling={false}即可。示例代码:import { Picker } from '@react-native-picker/picker'; import { Text, View } from 'react-native'; <Picker mode="dropdown" selectedValue={selectedVal} onValueChange={val => setSelectedVal(val)} renderDropdownItem={(itemProps) => ( <View style={{ paddingVertical: 10, paddingHorizontal: 12 }}> <Text allowFontScaling={false}>{itemProps.label}</Text> </View> )} > <Picker.Item label="选项1" value="1" /> <Picker.Item label="选项2" value="2" /> </Picker> - iOS端:给Picker组件设置固定字号、行高的
itemStyle,同时在iOS原生入口文件ios/你的项目名/AppDelegate.mm的didFinishLaunchingWithOptions方法中加入如下配置,拦截UIPickerView的动态字体响应:
修改完原生配置后重新执行[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"UIPickerViewAdjustsFontForContentSizeCategory"];pod install,再重新编译安装App即可生效。
- 安卓端:把Picker的
方案3:全局拦截配置(适合整个App都不需要跟随系统字体缩放的场景)
如果项目本身就要求全局禁用字体缩放,直接在App入口文件(App.js/index.js)最顶部重写Text组件的默认属性即可,Picker内部渲染的所有文本都会遵循这个配置:import { Text } from 'react-native'; Text.defaultProps = { ...Text.defaultProps, allowFontScaling: false, };
注意:如果使用方案2的dialog模式安卓Picker,自定义渲染逻辑需要单独配置
renderDialogItem属性,用法和renderDropdownItem完全一致。
内容的提问来源于stack exchange,提问作者Pooja
相关产品推荐
相关产品推荐

