我正在开发一个聊天应用程序,其中有一个ChatScreen
,假设用户向上滚动聊天,现在只有当用户不在底部时,才会出现scrollToBottom
按钮(就像流行的聊天应用程序一样),所以我尝试了以下操作:
首先我尝试检测用户何时滚动ScrollView
,然后使用onScroll
prop nativeEvent
检测用户是否不在底部,即他/她向上滚动。然后如果是这样,我显示应该出现在聊天屏幕右下角的按钮。
下面是我的方法的代码。(如果条件满足,是否可以在onScroll
prop中返回View
组件?)
<ScrollView
ref={scrollViewRef}
onScroll={({nativeEvent}) => {
const isCloseToBottom = nativeEvent.layoutMeasurement.height + nativeEvent.contentOffset.y > nativeEvent.contentSize.height - 30;
if (!isCloseToBottom) {
console.log('show scroll to bottom button')
return (
<TouchableOpacity style={{position:'absolute', bottom:40, right:10, backgroundColor:'grey'}} onPress={() => scrollViewRef.current.scrollToEnd()}>
<Icon ... />
</TouchableOpacity>
)
}
}}
>
...
</ScrollView>
这就是我所尝试的,虽然当我使用console.log('show scroll to bottom button')
调试时,如代码所示,它被触发了,但我无法在屏幕上呈现/看到Button组件。(我尝试在<TouchableOpacity />
的样式属性中设置opacity:1
和zIndex:1
,但仍然看不到)。
我做错了什么?任何解决这个问题的方法都将非常感激。
2条答案
按热度按时间ovfsdjhp1#
好吧,临时的解决方案是创建一个状态并进行条件渲染(我认为这种方法不是最佳的,因为我们将在每次用户向上滚动或
onScroll
触发时设置状态)。insrf1ej2#
我假设你的第一个渲染视图总是在底部,所以你可以用圆括号把你的组件包起来,然后先设置一个条件,比如:
如果你想添加一些动画,你可以使用
Animated.View
。另一种验证用户是否在底部的方法是使用
index
,但您需要使用<FlatList/>
。在
const renderItem = (index) => {}
上传递值