React-Native样式粘贴时的粘性标题

问题描述 投票:2回答:1

我有一个简短的问题:如何在滚动视图中粘贴标题时应用不同的样式? 我想在它粘住时添加一些阴影/高度。

谢谢 :)

Environment

  • 反应原生:0.45.0
styling react-native-scrollview react-native
1个回答
0
投票

目前React Native ScrollView组件有一个名为stickyHeaderIndices的属性,即使在你的0.45版本中也是如此。您可以使用它来传递应该是粘滞的标题子索引。之后,您可以使用onScroll事件获取当前滚动位置,并在实现您的标题大小时添加带阴影的自定义样式。请参阅此处的示例:

https://snack.expo.io/@fabiodamasceno/scroll-sticky-styled

或者如果您愿意:

import * as React from 'react';
import { Text, View, ScrollView } from 'react-native';

const HEADER_HEIGHT = 20;
const headerStyle = {
  backgroundColor: '#e5e5e5',
  height: HEADER_HEIGHT
}
const myShadowStyle = {
  elevation: 3,
  shadowOpacity: 0.2,
  shadowRadius: 6,
  shadowOffset: {
    height: 3,
    width: 0,
  },
};

export default class App extends React.Component {
  state = {
     headerStyle : {
     ...headerStyle
    }
  }
  render() {
    return (
     <View style={{marginTop: HEADER_HEIGHT, height: 150}}>
      <ScrollView 
        stickyHeaderIndices={[0]} 
          onScroll={event => {
            const y = event.nativeEvent.contentOffset.y;
            if(y >= HEADER_HEIGHT)
              this.setState({
                headerStyle:{
                    ...headerStyle,
                    ...myShadowStyle
                }
              })
            else
              this.setState({
                  headerStyle:{
                      ...headerStyle,
                  }
                })
          }}
      >
        <View style={this.state.headerStyle}>
          <Text>My Header Title</Text>
        </View>
        <Text>Item 1</Text>
        <Text>Item 2</Text>
        <Text>Item 3</Text>
        <Text>Item 4</Text>
        <Text>Item 5</Text>
        <Text>Item 6</Text>
        <Text>Item 7</Text>  
        <Text>Item 8</Text>
        <Text>Item 9</Text>
        <Text>Item 10</Text>
        <Text>Item 11</Text>
        <Text>Item 12</Text>
        <Text>Item 13</Text>
        <Text>Item 14</Text>
      </ScrollView>
    </View>
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.