为什么刷新列表以获取其项目时 iOS 上不显示刷新指示器



我有一个平面列表,在我的应用程序中保存条目。第一个应用程序启动列表将为空,用户必须登录才能获取/同步其条目。用户登录后,我正在调用 child.refresh 函数来触发平面列表的刷新。条目将正确同步并放入列表中。在 Android 上,我可以在列表获取条目时看到刷新指示器。但是在iOS上它不会显示它,并且看起来该应用程序一直卡住,直到条目最终提供给列表。可能是什么问题?当列表中没有任何内容时,刷新指示器不会显示?

   <FlatList
            scrollEnabled={this.props.scroll}
            inverted
            style={styles.full}
            data={this.props.days}
            extraData={this.props.entries}
            refreshControl={
            <RefreshControl
                  refreshing={this.state.refreshing}
                  onRefresh={this.handleRefresh}
             />}
             renderItem={info => (
                    <ListItem
                        day={info.item.day}
                        key={info.item.key}
                        entries={this.props.entries}
                        onPickEntry={this.onPick}
                        scroll={this.SwipeScrollEvent.bind(this)}
                    />
              )}
  />

编辑:这就是我处理刷新的方式:

  this.setState({ refreshing: true }, function() { 
      //...
      //when all done
      this.setState({refreshing: false })
    })

由于某种原因,此问题仅发生在某些ios设备上,而不会出现在其他设备上。我不知道细节,但微调器似乎存在,但由于某种原因它不在屏幕顶部,原因似乎与 FlatList/VirtualizedList 的"反弹"功能有关。

添加bounces={!refreshing}作为道具似乎通过在内容加载/刷新时禁用弹跳功能来解决问题,迫使微调器保持在屏幕范围内。

根据 react 官方网站上的平面列表文档,您必须设置 refreshing={true} 而不是 refreshControl,而是

onRefresh={() => { // function to call here}

请尝试这个并让我知道

PS:刷新控件仅适用于列表视图或滚动视图 - 检查这里

此组件在滚动视图或列表视图中用于添加拉取 刷新功能。当滚动视图处于滚动Y:0时,滑动 down 触发 onRefresh 事件。

你应该在获取数据时设置刷新并将其直接传递给 FlatList 道具

在等待刷新的新数据时设置此值。

  <FlatList
    data={this.props.items}
    numColumns={2}
    keyExtractor={this._keyExtractor}
    renderItem={this._renderItem}
    onRefresh={this._onRefresh}
    refreshing={this.state.executingRequest}
  />

最新更新