下面是這聽起來像你想實現一個工作演示:https://sketch.expo.io/BkreW1che。您可以點擊「預覽」在瀏覽器中查看它。
這裏就是你需要測量的ListView的高度,放在它上面的指示燈(查看上面的鏈接查看完整的源代碼)的主要代碼:
handleLayout(event) {
const { y, height } = event.nativeEvent.layout;
// Now we know how tall the ListView is; let's put the indicator in the middle.
this.setState({ indicatorOffset: y + (height/2) });
}
renderIndicator() {
const { indicatorOffset } = this.state;
// Once we know how tall the ListView is, put the indicator on top.
return indicatorOffset ? (
<View style={[{ position: 'absolute', left: 0, right: 0, top: indicatorOffset }]} />
) : null;
}
render() {
return (
<View style={styles.container}>
<ListView
onLayout={(event) => this.handleLayout(event)}
dataSource={this.state.dataSource}
renderRow={this.renderRow}
/>
{this.renderIndicator()}
</View>
);
}
編輯:我現在明白了您希望指標隨列表一起滾動。這是從上面的簡單變化,只是增加一個onScroll
監聽到ListView:https://sketch.expo.io/HkEjDy92e
handleScroll(event) {
const { y } = event.nativeEvent.contentOffset;
// Keep the indicator at the same position in the list using this offset.
this.setState({ scrollOffset: y });
},
隨着這一變化,指示器實際上似乎有點落後於因爲onScroll
回調的延遲。
如果你想更好的性能,可以考慮渲染指標作爲renderRow
方法而不是一部分。例如,如果您知道指標應該在上午10點30分出現,那麼您將在10點行的中間呈現該指標。
什麼特別的理由,你不只是讓一個兄弟着眼於'ListView'具有較高'zIndex'? –
嗯..你的意思是一個ListView只是爲了酒吧?我已經嘗試了兄弟滾動型(因爲它只是一個元素),但我們怎麼會同步他們的滾動位置爲用戶向上和向下滾動FlatList? –
哦,我剛剛明白你想要達到的目標,所以這條線隨着滾動而移動。最簡單的方法是將其呈現在項目中,這是您的用戶界面的可行選擇嗎? –