反应本机滚动视图-scrollToEnd-在Android上

2024-01-23

我正在尝试调用一个将在 onFocus on 上触发的函数TextInput这将使scrollView一直向下滚动(使用scrollToEnd())

所以这是我的班级组件

class MyCMP extends Component {

  constructor(props) {
    super(props);
    this.onInputFocus = this.onInputFocus.bind(this);
  }

  onInputFocus() {
    setTimeout(() => {
      this.refs.scroll.scrollToEnd();
      console.log('done scrolling');
    }, 1);
  }

  render() {
    return (
      <View>
        <ScrollView ref="scroll">
          { /* items */ }
        </ScrollView>
        <TextInput onFocus={this.onInputFocus} />
      </View>
    );
  }
}

export default MyCMP;

上面的组件可以工作并且可以滚动,但需要花费很多时间......我正在使用setTimeout因为如果没有它,它只会向下滚动屏幕而不计算键盘的高度,因此它不会向下滚动足够多,即使当我继续打字(并触发输入焦点)时,它仍然不会一直向下滚动。

我现在正在处理这个问题,我确实设置了windowSoftInputMode to adjustResize我确实经历了一些模块,比如react-native-keyboard-aware-scroll-view or react-native-auto-scroll但他们都没有真正完成我需要的工作。

任何如何以正确的方式完成它的指示将不胜感激。谢谢!


而不是使用setTimeout你用键盘API https://facebook.github.io/react-native/docs/keyboard.html#addlistener反应本机。您为键盘显示添加事件侦听器,然后将视图滚动到末尾。如果您的组件中有多个输入,您可能需要创建一些输入集中的逻辑,但如果您只有一个输入,则可以像下面的示例一样执行此操作。

另一件好事是将你的引用更改为功能引用,因为字符串引用被认为是遗留的,并将在未来版本的 React 中删除。更多信息here https://reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs.

class MyCMP extends Component {

  constructor(props) {
    super(props);
    this.scroll = null;
    this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this._keyboardDidShow.bind(this));
  }

  componentWillUnmount () {
    this.keyboardDidShowListener.remove();
  }

  _keyboardDidShow() {
    this.scroll.scrollToEnd();
  }

  render() {
    return (
      <View>
        <ScrollView ref={(scroll) => {this.scroll = scroll;}}>
          { /* items */ }
        </ScrollView>
        <TextInput />
      </View>
    );
  }
}

export default MyCMP;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反应本机滚动视图-scrollToEnd-在Android上 的相关文章

随机推荐

  • 在 C++ 中格式化输出

    在 C 代码中 我有一个双变量矩阵 我将其打印出来 然而 由于它们的位数不同 输出格式被破坏 一种解决方案是做cout precision 5 但我希望不同的列有不同的精度 此外 由于在某些情况下存在负值 因此 标志也会引起问题 如何解决这
  • 为什么尝试写入大文件会导致 js 堆内存不足

    这段代码 const file require fs createWriteStream test dat for var i 0 i lt 1e7 i file write a 运行大约 30 秒后出现此错误消息 lt Last few
  • 无法使用 Windows 10 安装 Firebase Tools cli

    您好 我无法在 Windows 中通过命令行安装 firebase 工具 我使用下面的命令 npm install g firebase tools 输入此命令后 我收到以下错误 npm 错误 路径 C Users data AppData
  • 使用 OpenSSL API 读取公钥的密码回调

    当使用公钥加密技术时 通常习惯以加密格式存储私钥 因为它们当然应该是秘密的 这反映在 OpenSSL C API 中 它提供了诸如PEM write PrivateKey 它采用一个可选密码作为函数参数 用于加密密钥 如 AES 然后 当从
  • 通过 Amazon SNS 和 Unity 的 iOS APNS - 无法创建开发 iOS 证书

    我正在尝试通过 Unity 中的 Amazon SNS 设置推送通知 我的 Android 方面工作得很好 但 iOS 方面却遇到了问题 我能够让设备注册到苹果生产SNS 应用程序并订阅主题 但一旦我尝试发送通知 端点 已启用 状态就会变为
  • Javascript:“取消”动态脚本标签?

    我使用动态脚本标签从外部域请求 javascript 有时请求花费的时间太长 如果请求时间太长 是否可以停止请求或超时 我不想使用 xmlhttprequest 因为我想避免使用服务器端代理 Thanks 话虽如此 动态添加脚本有多种方法
  • x/2 和 x>>1 或 x*2 和 x << 1 之间的差异,其中 x 是整数

    正如我们所知 计算整数 x 2 我们只需编写y x 2 对于 x 2 也类似 但优秀的程序员会使用位操作来计算这个值 他们只是做y x gt gt 1 这两种方法有什么区别吗 我所说的差异是指所需时间 空间 内存的差异 或者两者完全相同 即
  • 如何获取select2:unselect的值

    我怎样才能获得未选择选项的值Select2 https select2 github io using select2 unselect mySelect on select2 unselect function e var unselec
  • 重命名android中的包名称

    我想在我的项目中重命名包名称 到目前为止我有 9 个包 当我更改包名称时 更改是在 java 和 xml 文件中完成的 但在Manifest xml文件中 活动定义部分 包活动在重命名包后不会改变 请帮我 Android Tools 中有一
  • Camel - 流缓存不缓存/无法转换?

    读完一遍之后 我似乎失去了 内在 的身体 请注意 我使用的是 Camel 的流缓存 并且输入是来自 http 组件的 json 文件 我有一个带有以下代码的处理器 log debug Body Type exchange getIn get
  • 使用 jsonp 来自 Jquery 的 REST WCF url 中的 javascript 错误

    当我尝试从 jsonp 执行 REST WCF 服务时 出现 javascript 错误 网页错误详细信息 User Agent Mozilla 4 0 compatible MSIE 8 0 Windows NT 6 1 WOW64 Tr
  • 如何在Android RxJava中使用flatMap在不使用lambda函数的情况下顺序调用三个Web服务?

    我的 API 客户端 public class ApiClient public static final String BASE URL http baseurl com wp json private static Retrofit r
  • 生成 test-jar 以及测试包中的 jar 文件

    我想将我的测试包打包成jar文件 如何从maven插件Surefire执行生成test jar 通过使用以下配置 您可以从测试中创建一个 jar
  • 相当于 Python 2 中 BytesIO 的 getbuffer

    在Python 3中 我可以通过以下方式获取ByteIO对象的大小object getbuffer nbytes where object ByteIO 但是什么是最好的等价物getbuffer 在 Python 2 中 做了一些探索 我发
  • Bash 中对除数进行四舍五入

    我如何舍入两个除数的结果 例如 3 2 就像我做的时候一样 testOne 3 2 testOne 包含 1 而它应该四舍五入为 2 作为 3 2 1 5 的答案 要在截断算术中进行舍入 只需添加 denom 1 到分子 示例 向下舍入 N
  • 使用用户定义或 python 命令序列的 C++ 线程不会在 gdb 异步模式下停止

    我在嵌入式 powerpc 目标上使用 gdb 7 4 1 对使用 pthread 的多线程 C 程序执行一些分析 我的最终目标是使用 python 编写 gdb 脚本来自动化一些常见的分析功能 问题是 当我单独运行命令与在 gdb 用户定
  • 通过 jQuery 检测对特定 HTML 5 功能的支持

    我正在编写一些 HTML5 演示代码 包括类似的内容
  • python 中的 Chrome 扩展?

    我想创建一个 google chrome 扩展 具体来说 我想制作一个打包应用程序 但不是托管应用程序 我认为这将我限制在 JavaScript 和 HTML CSS 方面是否正确 我的问题是我需要做一些复杂的数学 奇异值分解 因子分析 并
  • 如何在 OMNeT++ 仿真过程中更改网络配置?

    我想修改element的一些参数 iniOMNeT 中的文件 例如模拟运行期间节点的传输速率 例如当节点收到一些控制消息时 我发现信息表明可以以某种方式循环配置 如下所示 一些变量 几个值 但是里面没有条件子句 ini文件 并且无法将来自
  • 反应本机滚动视图-scrollToEnd-在Android上

    我正在尝试调用一个将在 onFocus on 上触发的函数TextInput这将使scrollView一直向下滚动 使用scrollToEnd 所以这是我的班级组件 class MyCMP extends Component constru