Как скрыть React Native NavigationBar

у меня есть NavigatorIOS под Navigator и хотел бы скрыть NavigationBar навигатора, чтобы использовать панель NavigatorIOS. Есть ли способ сделать это?

Это скриншот это я видел. Мне нужен бэкенд NavigatorIOS..

структура, которую я хочу построить, следующая:

├── NavigatorRoute1
│   ├── NavigatorIOSRoute1
│   ├── NavigatorIOSRoute2
│   └── NavigatorIOSRoute3
└── NavigatorRoute2

код, который у меня находится ниже. (В основном получено из UIExplore образцы.

навигатор

render: function(){
return (
  <Navigator
    initialRoute={ROUTE_STACK[this.getInitialRouteIndex()]}
    initialRouteStack={ROUTE_STACK}
    style={styles.container}
    renderScene={this.renderScene}
    navigationBar={
      <Navigator.NavigationBar
        routeMapper={NavigationBarRouteMapper}
        style={styles.navBar}
      />
    }
  />
);
}

NavigatorIOS

render: function(){
var nav = this.props.navigator;
 return (
  <NavigatorIOS
    style={styles.container}
    ref="nav"
    initialRoute={{
      component: UserSetting,
      rightButtonTitle: 'Done',
      title: 'My View Title',
      passProps: {nav: nav},
    }}
    tintColor="#FFFFFF"
    barTintColor="#183E63"
    titleTextColor="#FFFFFF"
  />
);

}

обновление с моим решением

я добавил функцию для изменения состояния, которая обрабатывает рендеринг Navigator и передает prop компоненту для изменения состояния.

hideNavBar: function(){
  this.setState({hideNavBar: true});
},
render: function(){
 if ( this.state.hideNavBar === true ) {
  return (
    <Navigator
      initialRoute={ROUTE_STACK[0]}
      initialRouteStack={ROUTE_STACK}
      renderScene={this.renderScene}
    />
  );
 }else{
  return (
    <Navigator
      initialRoute={ROUTE_STACK[this.getInitialRouteIndex()]}
      initialRouteStack={ROUTE_STACK}
      style={styles.container}
      renderScene={this.renderScene}
      navigationBar={
        <Navigator.NavigationBar
          routeMapper={NavigationBarRouteMapper}
          style={styles.navBar}
        />
      }
    />
  );
}

}

и

render: function(){
 var hideNavBar = this.props.hideNavBar;
 return (
  <NavigatorIOS
    style={styles.container}
    initialRoute={{
      component: UserSetting,
      rightButtonTitle: 'Done',
      title: 'My View Title',
      passProps: {hideNavBar: hideNavBar},
    }}
    tintColor="#FFFFFF"
    barTintColor="#183E63"
    titleTextColor="#FFFFFF"
  />
 );

}

8 ответов


в вашем классе навигатора похоже, что вы проходите в навигационной панели. Вы можете добавить туда логику для передачи в любом навигаторе.NavigationBar или панель NavigatorIOS в зависимости от того, что вы хотите использовать. Для этого вам нужно указать переменную состояния в Navigator, которую вы обновите, когда хотите изменить панель.


Я решил это, определив пользовательскую навигационную панель, которая может проверять текущий маршрут. Будет выглядеть примерно так:

class NavigationBar extends Navigator.NavigationBar {
  render() {
    var routes = this.props.navState.routeStack;

    if (routes.length) {
      var route = routes[routes.length - 1];

      if (route.display === false) {
        return null;
      }
    }

    return super.render();
  }
}

используя Ваш пример:

render: function(){
  return (
    <Navigator
      initialRoute={{
        component: UserSetting,
        rightButtonTitle: 'Done',
        title: 'My View Title',
        display: false,
      }}
      style={styles.container}
      renderScene={this.renderScene}
      navigationBar={
        <NavigationBar
          routeMapper={NavigationBarRouteMapper}
          style={styles.navBar}
        />
      }
    />
  );
}

поскольку некоторые старые методы устарели, я использовал stacknavigator. Это работает для меня, если вы используете StackNavigator.

static navigationOptions = { title: 'Welcome', header: null };

чувствуйте свободным контактировать, если любой вопрос.


Если вы всегда используете NavigatorIOS, вы можете сделать это так:

  1. измените файл NavigatorIOS.усвн.JS как показано ниже:

    before: navigationBarHidden={this.props.navigationBarHidden}
    after:  navigationBarHidden={route.navigationBarHidden}
    
  2. навигатор.push ({navigationBarHidden: false})


Я сделал так:

Dashboard:{
  screen: Dashboard,
  navigationOptions: {
    headerStyle: {display:"none"},
    headerLeft: null
  },
},

передайте это свойство вместе с navigator.нажмите или initialRoute, установив его как true

navigationBarHidden?: Проптипы.боол

логическое значение, указывающее, скрыта ли панель навигации по умолчанию.

например:

<NavigatorIOS
          style={styles.container}
          initialRoute={{
            title: 'LOGIN',
            component: Main,
            navigationBarHidden: true,
          }}/>

или

this.props.navigator.replace({
        title: 'ProviderList',
        component: ProviderList,
        passProps: {text: "hai"},``
        navigationBarHidden: true,
  });

используйте заголовок: null для react-navigation, в ваших navigationOptions следующим образом;

navigationOptions: {
    header: null,
}

static navigationOptions = { title: 'Welcome', header: null };