React Navigation - Gradient color for Header

后端 未结 4 957
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-29 08:49

I am using React Navigation in React Native app and I want to change the backgroundColor for the header to be gradient and I found out there is a node module :

相关标签:
4条回答
  • 2020-12-29 09:26

    The solution of Mark P was right but now you need to define headerStyle and do the absolute positioning there:

    navigationOptions: {
      header: props => <GradientHeader {...props} />,
      headerStyle: {
        backgroundColor: 'transparent',
        position: 'absolute',
        top: 0,
        left: 0,
        right: 0,
        bottom: 0,
      },
    },
    

    and the GradientHeader:

    const GradientHeader = props => (
    <View style={{ backgroundColor: '#eee' }}>
        <LinearGradient
          colors={['red', 'blue']}
          style={[StyleSheet.absoluteFill, { height: Header.HEIGHT }]}
        >
          <Header {...props} />
        </LinearGradient>
      </View>
    )
    
    0 讨论(0)
  • 2020-12-29 09:33

    Just for your information, now with headerBackground props it's a way easier.

    You can have a gradient header just doing this :

    navigationOptions: {
      headerBackground: (
        <LinearGradient
          colors={['#a13388', '#10356c']}
          style={{ flex: 1 }}
          start={{x: 0, y: 0}}
          end={{x: 1, y: 0}}
        />
      ),
      headerTitleStyle: { color: '#fff' },
    }
    

    This solution works good even with SafeArea for IosX

    0 讨论(0)
  • 2020-12-29 09:33

    Similar to this issue: React Navigation; use image in header?

    For a Linear Gradient you would simply do >

    //imports

    import { Image, StyleSheet, View } from 'react-native';
    import { Header } from 'react-navigation' ;
    import LinearGradient from 'react-native-linear-gradient';
    

    //header

    Create the Header component which is wrapped in the Linear Gradient. by making the header backgroundColor: 'transparent' you will then show the Linear Gradient wrapping it.

    const GradientHeader = props => (
      <View style={{ backgroundColor: '#eee' }}>
        <LinearGradient
          colors={['#00a8c3', '#00373f']}
          style={[StyleSheet.absoluteFill, styles.linearGradient]}
        />
        <Header {...props} style={{ backgroundColor: 'transparent' }}/>
      </View>
    );
    

    Return the screen with the header being your GradientHeader component.

    const SimpleStack = StackNavigator({
      Home: {
        screen: MyHomeScreen,
      },
    }, {
      navigationOptions: {
        headerTitleStyle: { color: '#fff' },
        header: (props) => <GradientHeader {...props} />,
      }
    });
    

    Should look something like this with the above code.

    Gradient Header

    0 讨论(0)
  • 2020-12-29 09:37

    You can use LinearGradient component from the expo. It is a useful component and you can't install another library like react-native-linear-gradient. https://docs.expo.io/versions/latest/sdk/linear-gradient/. By the way, you can change the back button. It is easy.

    You can implement it on inside screen with navigationOptions like that

    static navigationOptions = ({ navigation }: any) => {
      const onGoBack = () => navigation.goBack();
      return {
        header: (props: any) => <GradientHeader {...props} />,
        headerStyle: { height: 68, backgroundColor: "transparent", color: colors.white },
        headerTitle: "Sign Up",
        headerTitleStyle: { color: colors.white, fontSize: 18 },
        headerLeft: (
          <TouchableOpacity style={{ width: 32, height: 32, paddingLeft: 8 }} onPress={onGoBack}>
            <Image source={images.back} resizeMode="center" style={{ width: 32, height: 32 }} />
          </TouchableOpacity>
        ),
      };
    };
    
    0 讨论(0)
提交回复
热议问题