在 FlatList 反应原生“keyboardDismissMode”

Posted

技术标签:

【中文标题】在 FlatList 反应原生“keyboardDismissMode”【英文标题】:React Native "keyboardDismissMode" at FlatList 【发布时间】:2018-12-02 08:02:15 【问题描述】:

滚动 FlatList 时是否有可能防止键盘消失?

当使用 ScrollView 时,将 prop "keyboardDismissMode" 设置为 "none" 是解决此问题的方法,但这对我在 FlatList 中不起作用...

我在一个自制组件中使用 FlatList,即在 Stack-Navigator 中,而它的标题中有一个聚焦的 TextInput。我像这样渲染 FlatList:

<View style=flex: 1>
  <FlatList 
    style=flex: 1
    data=this.props.data
    keyExtractor=(item, index) => item.id
    renderItem=this.renderItem
  />
</View>

renderItem() 函数:

renderItem = (item, index) => (
  <TouchableHighlight
    style=paddingVertical: 10
    onPress=() => 
      this.props.onChooseItem(item);
    
  >
    <Text numberOfLines=1 >
      item.text
    </Text>
  </TouchableHighlight>
)

【问题讨论】:

您能否发布有关如何呈现相关 FlatList 组件的代码? 我对问题的更改有帮助吗?我添加了渲染 FlatList 的方式和位置。 【参考方案1】:

文档at the beginning of the reference section 说 FlatList “继承 ScrollView Props,除非它嵌套在另一个相同方向的 FlatList 中。” 所以我认为你可以直接使用keyboardDismissMode而不用封装在滚动视图中。

【讨论】:

【参考方案2】:

平面列表中不需要滚动视图,这会产生性能问题。

只需在平面列表中添加onScrollBeginDrag=Keyboard.dismiss。它可以在 android 以及 ios 中运行,而 keyboardDismissMode='on-drag' 只能在 iOS 中运行

【讨论】:

【参考方案3】:

您可能考虑将 FlatList 封装在 ScrollView 中?

即使这似乎可以解决问题,也不是推荐的方法!

这是因为如果它强制重新渲染整个平面列表,则每次滚动屏幕时。

你最好试试react-native-keyboard-aware-scroll-view这样的组件

我发现这篇文章有一些替代的想法来解决它:How to use KeyboardAvoidingView with FlatList?

查看:https://facebook.github.io/react-native/docs/scrollview#keyboarddismissmode

【讨论】:

这是一个糟糕的方法:forums.expo.io/t/… ScrollView 中的 FlatList 是个坏主意。仅在没有 FlatList 的情况下渲染所需的组件将给出相同的结果。 既然 FlatList 继承了 ScrollView 的 props,他就不能避免这种封装,直接从 flatlist 中使用想要的 props 吗?请参阅我的答案中的链接。我尝试使用 onScrollBeginDrag 属性,它可以工作

以上是关于在 FlatList 反应原生“keyboardDismissMode”的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应原生中过滤FlatList中的项目

反应原生 |循环渲染 FlatList 的项目

反应原生 flatlist androidTV 焦点问题

反应原生 Flatlist 导航

如何反应原生重新渲染 Flatlist?

父平面列表项之间的反应原生显示平面列表组件