android 构建 apk 方向更改时,为什么 Flatlist 无法正确呈现?

Why Flatlist isn't rendering properly when android build apk orientation changes?

我正在使用 expo 构建食品储藏室服务应用程序,我正在从节点食品储藏室服务器获取项目列表,然后使用 Flatlist 在应用程序上呈现它们。

-> 以纵向模式启动应用程序时,您可以一直滚动到底部,但是当您旋转设备时,我无法一直滚动到底部,或者看起来我可以,但其余部分这些项目似乎超出了设备显示边界。

-> 相反,当我以横向模式启动应用程序时,我可以毫无问题地滚动到底部,但是当我将方向更改为纵向时,平面列表仅在屏幕的一半处呈现,我仍然能够滚动到它的末尾。

我试过传递给 extraData 以及将 flexgrow 添加到 contentContainerStyle,我也试过使用 ScrollView 而不是 View,但没有明显的改进。

const [refreshing,setRefreshing] = useState(false)

ScreenOrientation.addOrientationChangeListener(
    evt => {
      setCurrOrientation(evt.orientationInfo.orientation)
      setRefreshing(!refreshing)
    }
  )

ScreenOrientation.getOrientationAsync().then(result => setCurrOrientation(result.orientation))

keyExtractor = (item, index) => index.toString()

  renderItem = ({ item,index }) => (
    <ListItem
      key={index}
      leftAvatar={{ source: { uri: BASE_URL + ':' + PORT + '/uploads/' + item.rowid + '/image.png' } }}
      title={<Text style={{ fontFamily: 'fake-receipt' }}>{item.item_name}</Text>}
      subtitle={<Text style={{ fontFamily: 'fake-receipt', color: 'grey', fontSize: 10 }}>{item.item_type}</Text>}
      containerStyle={{ borderBottomColor: '#F0F0F0', borderBottomWidth: 1, borderBottomStartRadius: 10, borderTopStartRadius: 10 }}
      onPress={() => {
        setSelectedItemIndex(index);
        setSelectedItemRowID(item.rowid);
        setSelectedItemSugarCondition(item.sugar === 'yes' ? 'yes' : 'no');
        setOverlayVisible(true);
      }}
      rightIcon={<IconFA name={'plus'}
        size={20}
        color='#26a69a'
      />}

    />
  )

<View>
          <FlatList
            contentContainerStyle={{ flexGrow: 1 }}
            extraData={refreshing}
            keyExtractor={this.keyExtractor}
            data={itemsList}
            renderItem={this.renderItem}
          />
</View>

令我感到困惑的是,它在 expo 应用程序中运行良好,但在 expo android 构建中运行良好,我有什么解决办法或者是否有更好的选择?

我使用的是 expo 3.0.10,设备是 运行 Android 9 Pie

我已经弄明白了,我将 Dimensions 与另一个视图一起使用并在其中放置了平面列表,这在定向后正确渲染了平面列表。

<View style={{ backgroundColor: '#f1f1f1', flex: 1 }}>
        <View style={{height:Dimensions.get('window').height - 80}}>
          <FlatList
            extraData={refreshing}
            keyExtractor={this.keyExtractor}
            data={itemsList}
            renderItem={this.renderItem}
          />
        </View>
</View>