javascript - React Native - 动态添加元素后滚动到元素
问题描述
我动态添加/删除元素,当添加的元素不在视口中时,我想通过滚动到添加的元素来将其放入视口。
但是我无法让它工作。我正在使用measure
函数来获取坐标,然后使用scrollTo
函数滚动到元素。
这是带有滚动视图的父组件
const scrollTo = (config) => {
scrollElRef.current.scrollTo(config);
};
return (
<ScrollView style={styles.container} ref={scrollElRef}>
<Text style={styles.paragraph}>
aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto
beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia
voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni
dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit.
</Text>
<Card>
{items.map((i) => <AssetExample key={i} scrollTo={(c) => scrollTo(c)}/>)}
</Card>
</ScrollView>
);
}
这是添加/删除元素并将坐标发送到父视图的子组件
React.useEffect(() => {
if(asset) {
elRef.current.measure((x, y, w, h, pageX, pageY) => {
const elementBottom = pageY + h;
const isInViewport = elementBottom < height;
if (!isInViewport) {
scrollTo({y: pageY, animated: true});
}
});
}
}, [asset, scrollTo, height])
这是一个示例应用程序,它显示了问题。
解决方案
对于 ScrollView,您需要为其子组件提供特定的高度以使其工作。而不是动态的,只需提供特定的高度。希望它在那之后工作!
推荐阅读
- php - 如何在 nadroid 中通过库 net.gotev:uploadservice:2.1 将字符 utf8 发送到服务器
- nosql - Couchbase N1QL 查询总是返回空并且删除重建主索引失败
- amazon-web-services - 根据用户名杀死YARN应用
- git - 当您的 Github pull request 与 rebase 合并时,如何轻松处理这种情况?
- azure - HTTPS 的 Azure 应用服务 URL 重写失败
- asp.net-mvc - 如何发布到 azure
- filter - 如何在调用函数返回 Result::Err 时过滤掉迭代器的值?
- java - BST 删除方法不会删除插入的第一个节点
- mysqli - mysqli,通过增加一个数字来更改所有行,但不能超过某个值
- haskell - 了解haskell中的Splitlines函数