我的键盘里有一个平面列表.当显示键盘时,我想滚动到平面列表的末尾.

我正在收听"keyboardDidShow"事件,它确实会被触发,但它可能会被触发得太早,因为在调用scrollToEnd后,FlatList没有滚动到最后.

我已经研究了KeyboardAvoidgView的onLayout事件,但是仅仅设置onLayout事件来触发一个函数似乎就可以阻止KeyboardAvoidgView在显示键盘时调整其大小.

<KeyboardAvoidingView behavior='padding' style={{ flex: 1}} onLayout={this._scrollEnd}>

代码:

import React from 'react';
import {Image, Linking, Platform, ScrollView, StyleSheet, Text, TouchableOpacity, View, Button, Alert, FlatList, TextInput, KeyboardAvoidingView, Keyboard} from 'react-native';
import { MonoText } from '../components/StyledText';

export default class HomeScreen extends React.Component {
  constructor() {
    super();
    this.state = {
      messages: getMessages()
    };

    this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this._scrollEnd);
    this.keyboardDidShowListener = Keyboard.addListener('keyboardDidHide', this._scrollEnd);
  }

  _scrollEnd = (evt) => {
    this.refs.flatList1.scrollToEnd();
  }

  render() {
    return (
      <KeyboardAvoidingView behavior='padding' style={{ flex: 1}} >
        <FlatList
          style={{ flex:1}}
          ref="flatList1"
          data={this.state.messages}
          renderItem={({ item }) => <Text>{item.text}</Text>}
        />
      </KeyboardAvoidingView>
    );
  }
}

推荐答案

事实上,如果你总是想滚动到最后,意味着你总是想看到最新的消息,对吗?

然后使用react native的新版本.再加上inverted来改变平面列表的上下颠倒.

<FlatList
      inverted
      style={{ flex:1}}
      ref="flatList1"
      data={this.state.messages}
      renderItem={({ item }) => <Text>{item.text}</Text>}
    />

然后把你的this.state.messages码颠倒过来.然后你的最新消息将始终显示在平面列表的底部

就我而言,我不需要使用KeyboardAvoidingView

React-native相关问答推荐

如何重复使用expo 音频对象S录音?

react native调用fetch后如何使用Async Storage在本地保存数据?

使用react native 杀死应用程序后蓝牙仍处于活动状态

React js 做通用头部

在 React Native 上为 android 创建自定义 UI 组件,如何向 JS 发送数据?

为什么会出现此错误:Invariant Violation: Cannot update during an existing state transition

如何为 Picker 提供默认的Please select...选项?

使用 .env 变量在 react-native 应用程序上设置 appcenter

使用 Hooks 在功能组件中react-navigation 标题

React-Native 按钮居中对齐

是否可以在 React Native 中隐藏BugReporting extraData?

React-Native Packager 失败:重复的模块名称

从组件的 style属性中获取 CSS 属性值

React-Native 构建失败的应用程序:mergeDebugAssets

以编程方式在 React Native 中添加组件

React.createClass vs. ES6 箭头函数

如何从 React-Native 中的另一个类调用函数?

从标题中的按钮导航到不同的屏幕

如何从 react-native-fbsdk 获取用户信息(邮箱、姓名等)?

使用行数react-native文本组件