代码之家  ›  专栏  ›  技术社区  ›  Adarsh Sreeram

如何在RNRF中使自定义导航栏透明

  •  0
  • Adarsh Sreeram  · 技术社区  · 7 年前

    navigationBarStyle navTransparent 而且 navigationBarStyle={[STYLES.navBar]} 当试图使自定义导航栏透明时,所有这些都不起作用。有没有任何方法可以使用react navigation使其透明?我应该将react native router flux更改为react navigation吗?我已经在Git Hub中将其作为一个问题发布了 Github issue #2132

    由于我发现使用react导航很困难,我已经切换到RNRF。除了从RNRF切换到RN之外,还有什么解决方案可以使自定义导航栏透明吗?或者这是RN中的一个错误吗

    this is what my navBar looks like now

    这是我在导航栏中使用的代码。js文件:

    import {
     View, Image, StatusBar, TouchableWithoutFeedback
    } from 'react-native';
    import React, { Component } from 'react';
    import { Actions } from 'react-native-router-flux';
    
    class NavBar extends Component {
      render() {
        return (
          <View style={styles.backgroundStyle}>
          <StatusBar />
          <View style={{ flexDirection: 'row' }}>
          <TouchableWithoutFeedback onPress={() => Actions.pop()}>
          <Image
        source={require('./Images/back-arrow.png')}
        style={styles.backarrowStyle} />
          </TouchableWithoutFeedback>
    
          <Image
      source={require('./Images/help.png')}
      style={styles.helpStyle} />
    
    
      <Image
    source={require('./Images/setting.png')}
    style={styles.settingStyle} />
        </View>
    </View>
        );
      }
    
    }
    const styles = {
      backgroundStyle: {
     backgroundColor: 'transparent',
      },
      backarrowStyle: {
        resizeMode: 'contain',
        flexDirection: 'row',
        width: 55,
        height: 55,
        left: 0,
        justifyContent: 'flex-start'
      },
      helpStyle: {
        resizeMode: 'contain',
          width: 50,
          height: 50,
          left: 210,
          justifyContent: 'flex-end',
          position: 'relative'
    
      },
      settingStyle: {
        resizeMode: 'contain',
        width: 50,
        height: 50,
        justifyContent: 'flex-end',
      position: 'relative',
      left: 210
    }
    };
    
    
    export default NavBar;

    import React from 'react';
    import { Scene, Router } from 'react-native-router-flux';
    import MainScreen from './components/MainScreen';
    import ChallengeScreen from './components/ChallengeScreen';
    import NavBar from './components/NavBar';
    import Toss from './components/Toss';
    
    const RouterComponent = () => {
      return (
        <Router>
    <Scene key="root">
        <Scene key="homeScreen" component={MainScreen} hideNavBar={1} />
        <Scene
         key="screen2" component={ChallengeScreen}
         navBar={NavBar}
            />
        <Scene
         key="screen3" component={Toss}
       navBar={NavBar}
            />
    </Scene>
        </Router>
      );
    };
    export default RouterComponent;
    1 回复  |  直到 7 年前
        1
  •  1
  •   digit    7 年前

    <Scene key="scene2" component={ChallengeScreen} 
           navigationBarStyle={{opacity:0.3}}/> 
    

    但问题是整个导航栏(包括左右按钮)将继承不透明度。我建议只设置hidenavbar={true},并在场景组件中实现自定义导航栏。例如:场景2中的组件(ChallengeScreen)

     render() {
         const customNavbar = {
           <View style={{position:'absolute', top:0, flexDirection:'row', justifyContent:'space-between', backgroundColor:'transparent', padding:10}}>
               <TouchableOpacity>
                <Text>Left Button</Text>
               </TouchableOpacity>
               <Text>Title</Text>
               <TouchableOpacity>
                  <Text>Right Button</Text>
               </TouchableOpacity>
           </View>
        }
    
       return () {
         <View style={{flex:1}}>
             {customNavbar}
             <View></View>
         </View>
       }
     }