ios-React Native自适应字体大小

我想问一下如何处理本机句柄或做响应字体。 例如,在iPhone 4s中,我的fontSize:14,而在iPhone 6中,我的fontSize:18。

12个解决方案

50 votes

您可以使用PixelRatio

例如:

var React = require('react-native');

var {StyleSheet, PixelRatio} = React;

var FONT_BACK_LABEL = 18;

if (PixelRatio.get() <= 2) {

FONT_BACK_LABEL = 14;

}

var styles = StyleSheet.create({

label: {

fontSize: FONT_BACK_LABEL

}

});

编辑:

另一个例子:

import { Dimensions, Platform, PixelRatio } from 'react-native';

const {

width: SCREEN_WIDTH,

height: SCREEN_HEIGHT,

} = Dimensions.get('window');

// based on iphone 5s's scale

const scale = SCREEN_WIDTH / 320;

export function normalize(size) {

const newSize = size * scale

if (Platform.OS === 'ios') {

return Math.round(PixelRatio.roundToNearestPixel(newSize))

} else {

return Math.round(PixelRatio.roundToNearestPixel(newSize)) - 2

}

}

用法:

fontSize: normalize(24)

您可以通过按预先定义的大小在每个组件上使用大小来进一步迈进。

例:

const styles = {

mini: {

fontSize: normalize(12),

},

small: {

fontSize: normalize(15),

},

medium: {

fontSize: normalize(17),

},

large: {

fontSize: normalize(20),

},

xlarge: {

fontSize: normalize(24),

},

};

chinloong answered 2020-01-11T01:27:31Z

31 votes

我们使用编写的简单,直接,可扩展的utils函数:

import { Dimensions } from 'react-native';

const { width, height } = Dimensions.get('window');

//Guideline sizes are based on standard ~5" screen mobile device

const guidelineBaseWidth = 350;

const guidelineBaseHeight = 680;

const scale = size => width / guidelineBaseWidth * size;

const verticalScale = size => height / guidelineBaseHeight * size;

const moderateScale = (size, factor = 0.5) => size + ( scale(size) - size ) * factor;

export {scale, verticalScale, moderateScale};

为您节省很多时间来做很多事。 您可以在我的博客文章中了解更多信息。编辑:我认为将这些功能提取到自己的npm包中可能会有所帮助,我还在包中包括ScaledSheet,这是StyleSheet的自动缩放版本。您可以在这里找到它:react-native-size-matters。

nirsky answered 2020-01-11T01:28:01Z

9 votes

因为响应式单元目前在反应式本机中不可用,所以我想说最好的选择是检测屏幕尺寸,然后使用它来推断设备类型并有条件地设置fontSize。

您可以编写类似以下的模块:

function fontSizer (screenWidth) {

if(screenWidth > 400){

return 18;

}else if(screenWidth > 250){

return 14;

}else {

return 12;

}

}

您只需要查找每个设备的默认宽度和高度即可。 如果在设备更改方向时宽度和高度发生了翻转,您可能可以改用宽高比,或者只是找出两个维度中较小的一个以得出宽度。

此模块或该模块可以帮助您找到设备尺寸或设备类型。

Isaac Madwed answered 2020-01-11T01:28:34Z

6 votes

看看我写的图书馆:[https://github.com/tachyons-css/react-native-style-tachyons]

它允许您在启动时指定root-fontSize(pa2),可以将其作为PixelRatio或其他设备特性的依赖。

然后,您将获得相对于pa2的样式,不仅是fontSize,而且还有填充等。

Something

说明:

pa2始终是您的基本字体大小

pa2提供了相对于基本字体大小的填充。

Fabian Zeindl answered 2020-01-11T01:29:16Z

4 votes

我只使用屏幕尺寸的比例,对我来说效果很好。

const { width, height } = Dimensions.get('window');

// Use iPhone6 as base size which is 375 x 667

const baseWidth = 375;

const baseHeight = 667;

const scaleWidth = width / baseWidth;

const scaleHeight = height / baseHeight;

const scale = Math.min(scaleWidth, scaleHeight);

export const scaledSize =

(size) => Math.ceil((size * scale));

测试

const size = {

small: scaledSize(25),

oneThird: scaledSize(125),

fullScreen: scaledSize(375),

};

console.log(size);

// iPhone 5s

{small: 22, oneThird: 107, fullScreen: 320}

// iPhone 6s

{small: 25, oneThird: 125, fullScreen: 375}

// iPhone 6s Plus

{small: 28, oneThird: 138, fullScreen: 414}

shentaoy answered 2020-01-11T01:29:40Z

4 votes

adjustsFontSizeToFit和numberOfLines为我工作。 他们将长电子邮件调整为1行。

numberOfLines={1}

adjustsFontSizeToFit

style={{textAlign:'center',fontSize:30}}

>

{this.props.email}

Gundam Meister answered 2020-01-11T01:30:00Z

2 votes

从'react-native'导入{Dimensions};

const {width,fontScale} = Dimensions.get(“ window”);

const styles = StyleSheet.create({fontSize:idleFontSize / fontScale,});

fontScale根据您的设备获取比例。

Paras Korat answered 2020-01-11T01:30:33Z

1 votes

通过执行以下操作,我设法克服了这一问题。

为当前视图选择所需的字体大小(确保对于您正在使用的当前设备,它看起来不错模拟器)。

textFontSize: { fontSize = width / 24 },...并定义宽度像这样在组件外部:let width = Dimensions.get('window').width;

现在console.log(width)并写下来。 如果你的字体好看尺寸为15,宽度为360,例如360除以15(= 24)。 这将是重要的价值将调整为不同的大小。

像这样在样式对象中使用此数字:textFontSize: { fontSize = width / 24 },...

现在您有了一个响应式fontSize。

Walter Monecke answered 2020-01-11T01:31:16Z

1 votes

我最近遇到了这个问题,最终使用了react-native-extended-stylesheet

您可以根据屏幕尺寸设置rem值和其他尺寸条件。 根据文档:

// component

const styles = EStyleSheet.create({

text: {

fontSize: '1.5rem',

marginHorizontal: '2rem'

}

});

// app entry

let {height, width} = Dimensions.get('window');

EStyleSheet.build({

$rem: width > 340 ? 18 : 16

});

colakollektiv answered 2020-01-11T01:31:40Z

1 votes

我们可以使用flex布局,并使用AdjustsFontSizeToFit = {true}来响应字体大小,然后文本会根据容器的大小进行调整。

adjustsFontSizeToFit

style={styles.valueField}>{value}

但是在样式中,您还需要放置一个fontsize,然后才可以调整AdjustFontSizeToFit工作。

valueField: {

flex: 3,

fontSize: 48,

marginBottom: 5,

color: '#00A398',

},

Payel Dutta answered 2020-01-11T01:32:04Z

1 votes

为什么不使用PixelRatio.getPixelSizeForLayoutSize(/* size in dp */);,它与Android中的pd单位相同。

Ahmed M.Kamal answered 2020-01-11T01:32:24Z

-2 votes

您可以使用类似这样的东西。

var {height,width} = Dimensions.get('window');var textFontSize = width * 0.03;

inputText: {

color : TEXT_COLOR_PRIMARY,

width: '80%',

fontSize: textFontSize

}

希望这对您有所帮助,而无需安装任何第三方库。

Guna Sekhar answered 2020-01-11T01:32:53Z

native字体尺寸自适应 react_ios-React Native自适应字体大小相关推荐

  1. react native loading动画_TypeScript for React (Native) 进阶

    I. 为何要用TypeScript 我们公司在德国还有个团队. 我们这次要接他们的一个库. 其中的一个API要求我们传入参数, 这个API是这样定义的: /** * @param {Object} i ...

  2. 【React Native】在原生和React Native间通信(RN调用原生)

    一.从React Native中调用原生方法(原生模块) 原生模块是JS中也可以使用的Objective-C类.一般来说这样的每一个模块的实例都是在每一次通过JS bridge通信时创建的.他们可以导 ...

  3. 移动端设置html的字体尺寸,移动端开发元素及字体尺寸适配基础知识

    刚看了一篇真正教会你开发移动端页面的文章(二),文章写的很清楚,现总结下他的核心思想及自己所查阅的一些资料: 假设设计稿是iPhone6(iPhone6设备像素为750px:设备像素比为2,即其适口尺 ...

  4. [React Native Android安利系列]搭建React Native Android环境

    欢迎大家收看react-native-android系列教程,跟着本系列教程学习,可以熟练掌握react-native-android的开发,你值得拥有 https://segmentfault.co ...

  5. react native 添加自定义字体

    不可避免地,一款高颜值的App或多或少会使用自定义的字体,如何在React Native项目中添加自定义字体呢?答案还是相对简单的,几个命令行命令就能搞定 1.首先,确保字体格式是ttf格式的字体,并 ...

  6. React Native开发速记

    文章目录 引子 React Native适用场景 React基础 JSX 组件的定义 高阶组件(HOC) 生命周期函数与组件渲染 组件的缺省属性 组件之间的通信 基础API Flex弹性布局 例子: ...

  7. 后盾 React Native 开发系列视频课程

    161 安卓打包及名称图标的设置 课程结语-fadsf5686.mp4 160 安卓apk打包的环境配置方式-fadsf5686.mp4 159 微信和支付宝支付的实现流程-fadsf5686.mp4 ...

  8. 2021年,Flutter 与 React Native该如何选择?

    ????????关注后回复 "进群" ,拉你进程序员交流群???????? 作者 | Wasim Charoliya 译者 | 王强 策划 | 田晓旭 2021 年,跨平台程序员之 ...

  9. Flutter 与 React Native 该如何选择

    跨平台程序员之间关于 React Native 和 Flutter 的旷日持久的争论越来越白热化了.前几年,React Native 还是开发人员的首选框架,但是自 2017 年 Flutter 发布 ...

  10. 构建了我的第一个React Native应用程序之后,我现在确信这是未来。

    by Taylor Milliman 泰勒·米利曼(Taylor Milliman) 构建了我的第一个React Native应用程序之后,我现在确信这是未来. (After building my ...

最新文章

  1. 在Workload Automation中实现suspend分析
  2. python turtle库画图案-Python:turtle库的使用及图形绘制
  3. ADO.NET实用经验(转自代码中国)
  4. 玩转Win10的45个快捷键
  5. 如何查看linux下串口信息
  6. 21.等值线图(Counter Plot)、Contour Demo、Creating a “meshgrid”、Calculation of the Values、等
  7. 计算机第二道启动密码怎么设置,电脑一道密码怎么设置
  8. C——结构体中的函数指针
  9. 02--Activiti初始化表
  10. 解决办法:eclipse查看安卓8.0及以上设备的LOG
  11. oracle 10g 各版本下载地址
  12. 数学建模——层次分析法(Matlab)【评价类问题】
  13. 视频教程-java淘宝优惠券系统-Java
  14. hbase基本操作命令及练习
  15. 计算机顶会英文论文查找
  16. unity开发炉石传说系列卡牌生成代码部分代码
  17. 线性规划与非线性规划的求解
  18. 第一章 企业管理概论
  19. 计算机电源测试电压,快速判断计算机电源好坏方法
  20. 行业话题 | 天天坐地铁,你知道BIM在地铁中的应用吗

热门文章

  1. 给我三分钟,带你领略热血江湖中的并查集算法
  2. Flash Builder 4.5下载地址与注册码
  3. Python学习笔记 - 探索字典Dictionary使用
  4. Oracle kswapd0,kswapd0进程过一段时间占用CPU高达100%
  5. linux 命令行 过滤,Linux常用文本过滤命令(find grep wc awk sed sort uniq split)
  6. 06 类与对象、封装、构造方法
  7. 四、五版币冠字号发行量统计排行
  8. JAVA学习路线资料
  9. javascript ybmiaov
  10. jmeter全局变量有的线程组引用不成功