响应本机文本离开我的屏幕,拒绝换行。该怎么办?

IT技术 css reactjs react-native flexbox
2021-03-28 05:44:23

可以在这个实时示例中找到以下代码

我有以下react本机元素:

'use strict';

var React = require('react-native');
var {
  AppRegistry,
  StyleSheet,
  Text,
  View,
} = React;

var SampleApp = React.createClass({
  render: function() {
    return      (
  <View style={styles.container}>

        <View style={styles.descriptionContainerVer}>
          <View style={styles.descriptionContainerHor}>
            <Text style={styles.descriptionText} numberOfLines={5} >
              Here is a really long text that you can do nothing about, its gonna be long wether you like it or not, so be prepared for it to go off screen. Right? Right..!
            </Text>
          </View>
        </View>

        <View style={styles.descriptionContainerVer2}>
          <View style={styles.descriptionContainerHor}>
            <Text style={styles.descriptionText} numberOfLines={5} >Some other long text which you can still do nothing about.. Off the screen we go then.</Text>
          </View>
        </View>



  </View>);
  }
});
AppRegistry.registerComponent('SampleApp', () => SampleApp);

具有以下样式:

var styles = StyleSheet.create({
  container:{
        flex:1,
    flexDirection:'column',
        justifyContent: 'flex-start',
        backgroundColor: 'grey'
    },
    descriptionContainerVer:{
    flex:0.5, //height (according to its parent)
    flexDirection: 'column', //its children will be in a row
    alignItems: 'center',
    backgroundColor: 'blue',
    // alignSelf: 'center',
  },
  descriptionContainerVer2:{
    flex:0.5, //height (according to its parent)
    flexDirection: 'column', //its children will be in a row
    alignItems: 'center',
    backgroundColor: 'orange',
    // alignSelf: 'center',
  },
  descriptionContainerHor:{
    //width: 200, //I DON\'T want this line here, because I need to support many screen sizes
    flex: 0.3,  //width (according to its parent)
    flexDirection: 'column',    //its children will be in a column
    alignItems: 'center', //align items according to this parent (like setting self align on each item)
    justifyContent: 'center',
    flexWrap: 'wrap'
  },
  descriptionText: {
    backgroundColor: 'green',//Colors.transparentColor,
    fontSize: 16,
    color: 'white',
    textAlign: 'center',
    flexWrap: 'wrap'
  }
});

这将导致以下屏幕:

屏幕外文字应用

如何阻止文本离开屏幕并将其限制在屏幕中间,宽度为父级的 80%。

我不认为我应该使用它,width因为我将在许多不同的移动屏幕上运行它并且我希望它是动态的,所以我认为我应该完全依赖flexbox.

(这是我flex: 0.8descriptionContainerHor.

我想要实现的是这样的:

我想要达到的目标

谢谢!

6个回答

我从下面的链接中找到了解决方案。

[Text] 文本不换行 #1438

<View style={{flexDirection:'row'}}> 
   <Text style={{flex: 1, flexWrap: 'wrap'}}> You miss fdddddd dddddddd 
     You miss fdd
   </Text>
</View>

输出

如果你想感谢他,下面是 Github 个人资料用户链接。

艾莉·里普利


编辑:2019 年 4 月 9 日星期二

正如@sudoPlz 在评论中提到的,它适用于flexShrink: 1更新此答案。

在此处输入图片说明

请注意此答案的信息部分github.com/facebook/react-native/issues/...
2021-05-24 05:44:23
我正在处理自定义卡组件,但这些解决方案不起作用。对我来说,有必要为我的内容容器定义一个恒定的宽度大小(我使用Dimensions宽度)。
2021-05-28 05:44:23
^^^ 这是这里的实际答案。接受这个操作!
2021-06-06 05:44:23
我发现在某些情况下flexShrink: 1应用于父视图也会有所帮助。
2021-06-10 05:44:23
谢谢,这是一个很好的答案,但我已经尝试过了,但由于某种原因它并不总是有效(不知道为什么:S)。flexWrap 在 react-native 中有点不稳定。+1虽然提出了这一点。
2021-06-16 05:44:23

该问题的解决方案是flexShrink: 1.

<View
    style={{ flexDirection: 'row' }}
> 
   <Text style={{ flexShrink: 1 }}>
       Really really long text...
   </Text>
</View>

根据您的设置,您可能还需要添加flexShrink: 1<View>的父级,以使其工作,所以玩它,你会成功的。

该解决方案是由Adam Pietrasiak此线程中发现的

父视图也是我的解决方案!如果父级有 flexDirection: 'column',则文本拒绝换行。
2021-06-08 05:44:23
你刚刚救了我的命……
2021-06-10 05:44:23

这是一个已知的错误flexWrap: 'wrap'对我不起作用,但这个解决方案似乎对大多数人有用

代码

<View style={styles.container}>
    <Text>Some text</Text>
</View>

样式

export default StyleSheet.create({
    container: {
        width: 0,
        flexGrow: 1,
        flex: 1,
    }
});
当单行文本脱离绑定时,我的 android 模拟器一直处于冻结状态。找到并修复这是一个可怕的错误(这个不太相关的问题是我发现的唯一问题)。这似乎已经修复了它,一个带有 {flexGrow: 1, flex: 1} 的容器和带有 {flex: 1} 的文本。
2021-05-23 05:44:23
我花了一天时间才找到您的答案...谢谢!
2021-05-30 05:44:23

你只需要为你<Text>的 flex包装一个,如下所示;

<View style={{ flex: 1 }}>
  <Text>Your Text</Text>
</View>
只有<Text style={{ flex: 1 }}>没有额外的<View>作品对我来说也是如此。
2021-05-29 05:44:23
确实,这flex: 1就是您所需要的。
2021-05-30 05:44:23
如果您不想让文本占据所有可用空间怎么办?
2021-06-03 05:44:23
那是唯一真正有效的正确解决方案
2021-06-10 05:44:23

这对我有用

<View style={{flexShrink:1}}>
  <Text>some long random text...</Text>
</View>