javascript - React Native Flatlist 不会动态呈现元素的宽度

标签 javascript css react-native react-native-flatlist

我正在尝试使用来自 ui 套件 nachos-ui 的平面列表和消息气泡样式创建消息传递界面,但我无法让平面列表根据文本量呈现不同宽度的文本气泡。每当我第一次发送消息时,气泡的宽度似乎还不错:

enter image description here

然而,每当我发送另一条消息时,尽管在这些图片中很难看到,它会改变前一条消息的宽度并将新消息压缩到最大宽度

enter image description here

这是我的平面列表代码:

<FlatList
          data={this.state.messages}
          style={{marginLeft: 280}}
          ref={ref => this.flatList = ref}
          onContentSizeChange={() => this.flatList.scrollToEnd({animated: true})}
          onLayout={() => this.flatList.scrollToEnd({animated:true})}
          keyExtractor = {item => item.timestamp}
          renderItem={({item}) => <Bubble style={{marginTop: 20}} color="#FFC800"
           >{item.contents}</Bubble>}
        />

此外,整个组件的代码可能有助于诊断问题:

<KeyboardAvoidingView style={styles.container} 
      behavior="padding"
      keyboardVerticalOffset={64}>
      <KeyboardAvoidingView style={styles.inputContainer}>

      <FlatList
          data={this.state.messages}
          style={{marginLeft: 280}}
          ref={ref => this.flatList = ref}
          onContentSizeChange={() => this.flatList.scrollToEnd({animated: true})}
          onLayout={() => this.flatList.scrollToEnd({animated:true})}
          keyExtractor = {item => item.timestamp}
          renderItem={({item}) => <Bubble style={{marginTop: 20}} color="#FFC800"
           >{item.contents}</Bubble>}
        />
      <View style={{flexDirection:'row', backgroundColor: 'transparent'}}>
      <Input
        containerStyle={{marginVertical: 10, width:300, marginLeft: 20}}
        inputStyle={styles.textInput}
        keyboardAppearance="dark"
        placeholder=""
        autoCorrect={false}
        onChangeText={(message) => { this.setState({message})}}
        value={this.state.message}
        />
        <Button 
          buttonStyle={{borderRadius: 25, marginTop: 40, marginLeft: 10, paddingVertical: 5, backgroundColor: "#9214FF"}}
          icon={{name: 'arrow-up', type: 'feather', color:'white'}}
          onPress={()=>{Keyboard.dismiss; this.onPressButton()}} 
          title=""/> 
        </View>
        </KeyboardAvoidingView>
      </KeyboardAvoidingView>

如何让平面列表根据提交的文本量以动态大小呈现每条消息,而不更改任何以前的消息,并且没有预先确定的最大宽度?

最佳答案

问题在于您的 FlatList 样式:

style={{marginLeft: 280}}

它“压缩”了右侧的所有元素,始终具有相同的宽度。

更好的方法是移除这个 marginLeft 并将右边的气泡与 :

对齐

<FlatList style= {{ alignItems: 'flex-end' }} ...>

关于javascript - React Native Flatlist 不会动态呈现元素的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50566085/

相关文章:

javascript - 在 html 中将所有按钮对齐在一起

ios - 在 iOS 模拟器上测试 OneSignal 推送通知

ios - 如何更改 React Native iOS 应用程序的本地推送通知图标

javascript - Ajax.BeginForm OnSuccess、onBegin、OnFailure 未触发

javascript - jQuery Form - 序列化为多维数组?

javascript - 我的图片幻灯片与页脚不协调。部分幻灯片位于页脚后面,不会向下滚动

react-native - 仅在 FlatList 中渲染 3 个项目

javascript - Jest - 获取测试和描述名称

jquery - 优化弹出窗口的 jquery、html 和 css 代码

javascript - Angular : Using a sprite sheet with ng-repeat