React Native Flex-Wrap 不会将文本换行或挤压到屏幕的一侧

Posted

技术标签:

【中文标题】React Native Flex-Wrap 不会将文本换行或挤压到屏幕的一侧【英文标题】:React Native Flex-Wrap either won't wrap or squishes text to side of screen 【发布时间】:2020-04-17 19:54:35 【问题描述】:

Full Project on Github

我使用 FlatList 从上到下显示一堆视图,其中每一行都有一个图像,旁边有一些文本。这就是视图的样子,注意较长的标题是如何在最后被截断的,而不是换行到下一行。

这是我的行代码。

const styles = StyleSheet.create(
    movieCell:
        flexDirection: 'row',
        width: '100%'
    ,
    cellText:
//        flex:1,
        flexWrap: 'wrap'
    ,
    textWrapper:
        flexDirection:'row'
    ,
    movieImage:
        width: 50,
        height: 50
    
)

const MovieCell = (props) => 
    return(
        <TouchableOpacity 
        style=styles.movieCell
        onPress=someFunction()
        >
            <Image source=uri: props.source style=styles.movieImage/>
            <View>
                <View style=styles.textWrapper >
                    <Text style=styles.cellText>props.title</Text>
                </View>
                <Text>props.year</Text>
            </View>
        </TouchableOpacity>
    )


似乎只有one solution that I've seen (Ashok's solution) 会影响文本的换行方式。不幸的是,看起来这个解决方案将文本向左推,因此文本不会填满屏幕。我用width: 100% 尝试了很多调整,但似乎没有任何帮助。

【问题讨论】:

【参考方案1】:

我认为因为您正在为图像指定宽度,所以它会弄乱 textWrapper 上的 flex。一种解决方案是获取屏幕宽度并减去图像宽度,然后将其用作 textWrapper 的宽度:

import  Dimensions  from 'react-native';

const imageWidth = 50;

const styles = StyleSheet.create(
  movieCell: 
    flexDirection: 'row',
    width: '100%'
  ,
  cellText: 
    // flexWrap: 'wrap' // you can remove this
  ,
  textWrapper: 
    // flexDirection: 'row', // and this
    width: Dimensions.get('screen').width - imageWidth // <-- add this
  ,
  movieImage: 
    width: imageWidth,
    height: imageWidth
  
);

您不需要在文本上使用 flexWrap。它会默认包装:)

【讨论】:

以上是关于React Native Flex-Wrap 不会将文本换行或挤压到屏幕的一侧的主要内容,如果未能解决你的问题,请参考以下文章

WIX React-native-navigation v2 不会调用 registerAppLaunchedListener()

React Native 和 Expo - SVG 不会在 iOS 设备上呈现

React-native 应用程序永远不会重新启动以处理 iOS 中的位置更新

react-native-firebase notifications().onNotification() 永远不会在 ios 中调用

iOS 上的自动更正不会在 react-native 中触发 onChangeText

SVG 文件不会在 React Native 上同时渲染