How to slide in and out from the bottom in React Native?

前端 未结 3 2055
天命终不由人
天命终不由人 2020-12-14 08:30

In React Native iOS, I would like to slide in and out of a like in the following picture.

In the following example, when a button is pressed, the Payment Inf

3条回答
  •  不知归路
    2020-12-14 08:40

    Basically, you need to absolute-position your view to the bottom of the screen. Then you translate its y value to equal its height. (The sub view must have a specific height in order to know how much to move it)

    Here's a playground showing the result: https://rnplay.org/apps/n9Gxfg

    Code:

    'use strict';
    
    import React, {Component} from 'react';
    import ReactNative from 'react-native';
    
    const {
      AppRegistry,
      StyleSheet,
      Text,
      View,
      TouchableHighlight,
      Animated
    } = ReactNative;
    
    
    var isHidden = true;
    
    class AppContainer extends Component {
      constructor(props) {
        super(props);
        this.state = {
          bounceValue: new Animated.Value(100),  //This is the initial position of the subview
          buttonText: "Show Subview"
        };
      }
    
    
      _toggleSubview() {    
        this.setState({
          buttonText: !isHidden ? "Show Subview" : "Hide Subview"
        });
    
        var toValue = 100;
    
        if(isHidden) {
          toValue = 0;
        }
    
        //This will animate the transalteY of the subview between 0 & 100 depending on its current state
        //100 comes from the style below, which is the height of the subview.
        Animated.spring(
          this.state.bounceValue,
          {
            toValue: toValue,
            velocity: 3,
            tension: 2,
            friction: 8,
          }
        ).start();
    
        isHidden = !isHidden;
      }
    
      render() {
        return (
          
               {this._toggleSubview()}}>
                {this.state.buttonText}
              
              
                This is a sub view
              
          
        );
      }
    }
    
    var styles = StyleSheet.create({
      container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
        marginTop: 66
      },
      button: {
        padding: 8,
      },
      buttonText: {
        fontSize: 17,
        color: "#007AFF"
      },
      subView: {
        position: "absolute",
        bottom: 0,
        left: 0,
        right: 0,
        backgroundColor: "#FFFFFF",
        height: 100,
      }
    });
    
    AppRegistry.registerComponent('AppContainer', () => AppContainer);
    

提交回复
热议问题