React-native-router-flux: Apakah ada cara untuk menyembunyikan navbar ketika orientasi berubah?

Dibuat pada 18 Apr 2016  ·  3Komentar  ·  Sumber: aksonov/react-native-router-flux

Saya ingin menampilkan navbar dalam mode potret dan bersembunyi dalam mode lansekap (untuk video layar penuh). Apakah ada cara untuk melakukan ini?

Komentar yang paling membantu

Anda dapat mengimplementasikan NavBar Anda sendiri dan meneruskannya ke Scene. Saya menggunakan sesuatu seperti itu

onLayout({nativeEvent}){
        const isPortrait = nativeEvent.layout.width === WIDTH;
        if (isPortrait){
            if (this.state.height != NAVBAR_HEIGHT_PORTRAIT){
                this.setState({height: NAVBAR_HEIGHT_PORTRAIT, delta:STATUS_BAR_HEIGHT});
            }
        } else {
            if (this.state.height != NAVBAR_HEIGHT_LANDSCAPE){
                this.setState({height: NAVBAR_HEIGHT_LANDSCAPE, delta:0});
            }
        }
    }
    render(){
        return (
            <View onLayout={this.onLayout.bind(this)} style={[styles.container, {height:this.state.height}, this.props.style]} >
                {this.props.navBarHeader}
                <View style={[styles.container, {height:this.state.height}, this.props.style]} >
                    <View style={{height:this.state.delta,flex:1}}></View>
                    <View style={{height:this.state.height-this.state.delta, flexDirection:'row'}}>
                        {this.props.navigationState.children.length > 1 ? this.renderBackButton(this.props) : this.renderLeftButton(this.props)}
                        <View style={{flex:1,justifyContent:'center',alignItems:'center'}}>
                            {this.renderTitle(this.props)}
                        </View>
                        {this.renderRightButton(this.props)}
                    </View>
                    {this.props.footer}
                </View>
            </View>
        );
    }

Mungkin kita bisa memasukkan logika seperti itu ke dalam komponen NavBar jika komunitas menginginkannya dan mengirimkan PR.

Semua 3 komentar

Anda dapat mengimplementasikan NavBar Anda sendiri dan meneruskannya ke Scene. Saya menggunakan sesuatu seperti itu

onLayout({nativeEvent}){
        const isPortrait = nativeEvent.layout.width === WIDTH;
        if (isPortrait){
            if (this.state.height != NAVBAR_HEIGHT_PORTRAIT){
                this.setState({height: NAVBAR_HEIGHT_PORTRAIT, delta:STATUS_BAR_HEIGHT});
            }
        } else {
            if (this.state.height != NAVBAR_HEIGHT_LANDSCAPE){
                this.setState({height: NAVBAR_HEIGHT_LANDSCAPE, delta:0});
            }
        }
    }
    render(){
        return (
            <View onLayout={this.onLayout.bind(this)} style={[styles.container, {height:this.state.height}, this.props.style]} >
                {this.props.navBarHeader}
                <View style={[styles.container, {height:this.state.height}, this.props.style]} >
                    <View style={{height:this.state.delta,flex:1}}></View>
                    <View style={{height:this.state.height-this.state.delta, flexDirection:'row'}}>
                        {this.props.navigationState.children.length > 1 ? this.renderBackButton(this.props) : this.renderLeftButton(this.props)}
                        <View style={{flex:1,justifyContent:'center',alignItems:'center'}}>
                            {this.renderTitle(this.props)}
                        </View>
                        {this.renderRightButton(this.props)}
                    </View>
                    {this.props.footer}
                </View>
            </View>
        );
    }

Mungkin kita bisa memasukkan logika seperti itu ke dalam komponen NavBar jika komunitas menginginkannya dan mengirimkan PR.

Ya saya menggunakan sesuatu yang serupa, meskipun lebih sederhana -

  onLayout = event => {
    const { width, height } = event.nativeEvent.layout;
    var newStyle;

    if (width > height) {
      newStyle = update(this.state.style, {marginTop: {$set: 0}});
    } else {
      newStyle = update(this.state.style, {marginTop: {$set: 64}});
    }
    this.setState({style: newStyle});

    // hide navbar in landscape mode
    Actions.refresh({hideNavBar: (width > height)});
  }

Hei @vinayr saya mencoba melakukan sesuatu yang serupa tetapi, di tempat saya, saya dapat

componentDidMount(){
   Actions.refresh({hideNavBar:false});
}

componentWillUnmount(){
   Actions.refresh({hideNavBar: true})
}

Jadi ketika saya meninggalkan adegan navbar, tetapi juga memuat ulang status atau sesuatu seperti itu, karena adegan sebelumnya memiliki validasi yang mendorong ke adegan saat ini, dan ketika saya kembali, itu dialihkan lagi ke adegan.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat