【问题标题】:Absolute positioning a FlatList item react-native绝对定位 FlatList 项目 react-native
【发布时间】:2018-04-01 00:10:36
【问题描述】:

我正在尝试在 react-native 中的 FlatList 中制作动画。

平面列表

--------
 item1
--------
 item2
--------
 item3
--------

当我按下 item2 时,FlatList 将如下所示:

--------
 item1
--------
 empty
--------
 item3

在 FlatList 之上(从空白区域开始),item2 将扩展到全屏高度,不允许 item1 和 item3 在列表中移动。

有没有人知道这是否可以使用 react-native 来完成?

我已经尝试过使用 zIndex 的绝对定位,但似乎没有任何效果。

这是我的 FlatList 项目

<Animated.View style={[ { height: this.state.height }, this.state.pressed ? { position: 'absolute', top:0, bottom:0, left:0, right:0, zIndex: 1000 } : 
{} ]}>
  <Text>Absolute expandable FlatList item</Text>
</Animated.View>

FlatList 项目具有绝对样式,因为在 react 中每个元素默认都有相对定位。

我做了一个没有绝对定位的技巧,使用 scrollToIndex 将元素移动到列表顶部,然后将其定位为绝对。但这会使 item3 在 item2 高度扩展时从屏幕上消失。

有什么想法吗?

【问题讨论】:

    标签: animation react-native absolute react-native-flatlist


    【解决方案1】:

    实现这一点的一种方法是拥有一个具有绝对定位和不透明度 0 的额外组件。当您按下某个项目时,您可以将按下项目的不透明度设置为 0,然后使用来自按下项目的信息渲染额外组件然后你可以给出想要的动画。这种方式按下项目的行仍将被填充但被视为空。如果这个额外的组件在FlatList 项目内,它就不能超出行的边界(据我所知)。您可能需要计算按下项目的位置以启动额外组件的动画。

    【讨论】:

    • 如果我这样做,那么动画就不会流畅。更改状态时我会闪烁,因为外部的“模态”组件将在每个项目点击时重新渲染。如果我在关闭它之前重置它,将显示旧元素或空元素的几分之一秒,然后更改状态并重新渲染组件。我只能在状态更改后使用它来更改 zIndex 和/或不透明度,但这不会是 fuid。
    • 我将响应标记为正确,因为您确实可以实现我的要求,但是当状态更改触发重新渲染时,两个项目(FlatList 项目和顶部使用的外部项目)都会出现闪烁一切)。我正在选择初始解决方案:FlatList.scrollToIndex + ItemList Animation + FlatList.scrollEnabled = false + itemList.scrollEnabled = true。
    • 我知道这不适合你的用例,但我做了这个可能对某些人有用的零食。 snack.expo.io/@n1ru4l/listview-2-fullscreen
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多