React Native fixed footer

后端 未结 20 1510
南旧
南旧 2020-12-22 16:57

I try to create react native app that looks like existing web app. I have a fixed footer at bottom of window. Do anyone have idea how this can be achieved with react native?

相关标签:
20条回答
  • 2020-12-22 17:20

    When flex is a positive number, it makes the component flexible and it will be sized proportional to its flex value. So a component with flex set to 2 will take twice the space as a component with flex set to 1.

       <View style={{flex: 1}>
                
         <ScrollView>
            //your scroll able content will be placed above your fixed footer content. 
            //when your content will grow bigger and bigger it will hide behind 
            //footer content. 
         </ScrollView>
    
         <View style={styles.footerContainer}>
            //your fixed footer content will sit fixed below your screen 
         </View>
    
    </View>

    0 讨论(0)
  • 2020-12-22 17:21

    The way I did this was to have a view (lets call it P) with flex 1, then inside that view have 2 more views (C1 and C2) with flex 0.9 and 0.1 respectively (you can change the flex heights to required values). Then, inside the C1 have a scrollview. This worked perfectly for me. Example below.

    <View style={{flex: 1}}>
        <View style={{flex: 0.9}}>
            <ScrollView>
                <Text style={{marginBottom: 500}}>scrollable section</Text>
            </ScrollView>
        </View>
        <View style={{flex: 0.1}}>
            <Text>fixed footer</Text>
        </View>
    </View>
    
    0 讨论(0)
  • 2020-12-22 17:22

    I found using flex to be the simplest solution.

    <View style={{flex:1, 
        justifyContent: 'space-around', 
        alignItems: 'center',
        flexDirection: 'row',}}>
    
      <View style={{flex:8}}>
        //Main Activity
      </View>
      <View style={{flex:1}}>
        //Footer
      </View>
    
     </View>
    
    0 讨论(0)
  • 2020-12-22 17:26

    Here's the actual code based on Colin's Ramsay answer:

    <View style={{flex: 1}}>
      <ScrollView>main</ScrollView>
      <View><Text>footer</Text></View>
    </View>
    
    0 讨论(0)
  • 2020-12-22 17:26

    @Alexander Thanks for solution

    Below is code exactly what you looking for

    import React, {PropTypes,} from 'react';
    import {View, Text, StyleSheet,TouchableHighlight,ScrollView,Image, Component, AppRegistry} from "react-native";
    
    class mainview extends React.Component {
     constructor(props) {
          super(props);
    
      }
    
      render() {
        return(
          <View style={styles.mainviewStyle}>
            <ContainerView/>
              <View style={styles.footer}>
              <TouchableHighlight style={styles.bottomButtons}>
                  <Text style={styles.footerText}>A</Text>
              </TouchableHighlight>
              <TouchableHighlight style={styles.bottomButtons}>
                  <Text style={styles.footerText}>B</Text>
              </TouchableHighlight>
              </View>
          </View>
        );
      }
    }
    
    class ContainerView extends React.Component {
    constructor(props) {
          super(props);
    }
    
    render() {
        return(
          <ScrollView style = {styles.scrollViewStyle}>
              <View>
                <Text style={styles.textStyle}> Example for ScrollView and Fixed Footer</Text>
              </View>
          </ScrollView>
        );
      }
    }
    
    var styles = StyleSheet.create({
      mainviewStyle: {
      flex: 1,
      flexDirection: 'column',
    },
    footer: {
      position: 'absolute',
      flex:0.1,
      left: 0,
      right: 0,
      bottom: -10,
      backgroundColor:'green',
      flexDirection:'row',
      height:80,
      alignItems:'center',
    },
    bottomButtons: {
      alignItems:'center',
      justifyContent: 'center',
      flex:1,
    },
    footerText: {
      color:'white',
      fontWeight:'bold',
      alignItems:'center',
      fontSize:18,
    },
    textStyle: {
      alignSelf: 'center',
      color: 'orange'
    },
    scrollViewStyle: {
      borderWidth: 2,
      borderColor: 'blue'
    }
    });
    
    AppRegistry.registerComponent('TRYAPP', () => mainview) //Entry Point    and Root Component of The App
    

    Below is the Screenshot

    0 讨论(0)
  • 2020-12-22 17:27

    Simple stuff here:

    Incase you don't need a ScrollView for this approach you can go with the below code to achieve Something like this :

    <View style={{flex: 1, backgroundColor:'grey'}}>
        <View style={{flex: 1, backgroundColor: 'red'}} />
        <View style={{height: 100, backgroundColor: 'green'}} />
    </View>
    
    0 讨论(0)
提交回复
热议问题