React Native:确定Text组件的行数

新手上路,请多包涵

正如标题所说,我一直在尝试找到一种方法来确定文本组件在获得文本后的行数。看看我下面的例子。

 <Text>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi semper ut ipsum in ultrices. Vivamus fringilla lacinia odio in accumsan. Proin sit amet pellentesque tortor. Nam mollis sit amet ligula id convallis. Etiam in semper diam. Cras id elit consectetur, interdum ante id, tincidunt nisi. Integer non elit placerat, dignissim nibh at, faucibus sem. Curabitur nec posuere turpis. Vivamus rhoncus nulla vitae mi imperdiet, elementum eleifend mi laoreet. Vestibulum molestie turpis non nibh elementum, sed ornare magna tristique. Aliquam erat volutpat. Phasellus volutpat mi vel tempor finibus.
</Text>

在运行时,我如何确定这个 Text 组件已经渲染了多少行。这个数字会因设备而异(例如,iPhone 5 与 iPhone 6+ 相比需要渲染更多的线条,因为它的屏幕尺寸更小)。我已经检查了 Text 组件的源代码,但似乎没有任何我想要的东西。

我正在使用 React Native 0.24。

有任何想法吗?

干杯。

原文由 coldbuffet 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
1 个回答

我想提供一个现代的解决方案。现在有一个 onTextLayout 事件,其中包括一个数组 lines 可以确定正在渲染的行数。 lines 数组中还有其他详细信息,例如每行的实际高度和宽度,可进一步用于确定文本是否被截断。

 const NUM_OF_LINES = 5;
const SOME_LONG_TEXT_BLOCK = 'Lorem ipsum ...';

function SomeComponent () {
  const [ showMore, setShowMore ] = useState(false);
  const onTextLayout = useCallback(e => {
    setShowMore(e.nativeEvent.lines.length > NUM_OF_LINES);
  }, []);

  return (
    <Text numberOfLines={NUM_OF_LINES} onTextLayout={onTextLayout}>
      {SOME_LONG_TEXT_BLOCK}
    </Text>
  );
}

原文由 Arno 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题