React Native 适配文本组件

Bat*_* G. 2 javascript fonts flexbox react-native expo

我试图将我的文本放在可用区域内,我的约束是这样的:

  • 文字不应溢出,
  • 文本必须在所有可用视图内按比例放大,
  • 单词不要分解成字符并转到下一行句子可以,
  • 当我在父视图中使用 flex 时,文本不应水平扩展视图超过屏幕宽度。

这是我的代码片段:

import React from "react";
import { StyleSheet, Text, View } from "react-native";
import { Font } from "expo";
import Lorem from "./src/helpers/lorem-ipsum-gen";

export default class App extends React.Component {
  constructor() {
    super()
    this.state = {
      fontLoaded: false,
    };
  }
  //theboldfont.ttf
  async componentWillMount() {
    await Font.loadAsync({
      "akzidenz-grotesk-bq-bold": require("./assets/fonts/AkzidenzGrotesk_BQ_Bold.otf"),
    });
    this.setState({ fontLoaded: true });
  }

  render() {
    let loremText = new Lorem().generate(20)

    return (
      <View style={styles.container}>
        <View>
          <View style={{ flex: 0.37 }} > </View>
          <View style={{ flex: 0.25, backgroundColor: "red" }} >
            <View >
              {
                this.state.fontLoaded ? (<Text
                  style={{ fontFamily: "akzidenz-grotesk-bq-bold", fontSize: 50 }}
                  adjustsFontSizeToFit={true}
                >
                  {loremText}
                </Text>) : null
              }

            </View>
          </View>
          <View style={{ flex: 0.38 }} >
            <Text>
              {loremText}
            </Text>
          </View>
        </View>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: "#fff",
    alignItems: "center",
    justifyContent: "center",
  },
});
Run Code Online (Sandbox Code Playgroud)

以及它的结果:

示例截图

我试图实现我的目标:

  • 我认为它与自定义字体有关并更改为默认字体(无效)
  • 在一些 github 问题中,人们在 text style prop 中写了 adjustsFontSizeToFit={true} (无效)
  • 我试过 allowFontScaling(无效)
  • 删除了字体大小(不起作用)
  • 删除了 flex 并设置静态宽度和高度以查看(无效)
  • 以上所有步骤的组合(无效)

Bat*_* G. 7

因此,在对文本组件尝试新事物后,我发现如果adjustsFontSizeToFit={true}不指定就无法正常工作,numberOfLines={number}但是有时会在行尾将我的单词分成字符。从文档来看,它可能在 android 中不可用。所以我仍然需要更好的方法来解决我的问题