2015-12-07 8 views
15

Sembra che abbia problemi con la creazione di un display: lo stile in linea equivale a Flexbox. Finora ho ottenuto la seguente (in cui le linee rosse e blu sono regolati dalla funzione di confine per aiutare con styling):Display: Equivalente in linea in React Native

current layout given code

Con questo codice:

var React = require('react-native'); 
var { 
    View, 
    ScrollView, 
    Image, 
    StyleSheet, 
    Text, 
    TouchableHighlight, 
} = React; 

//additional libraries 
var Parse = require('parse/react-native'); //parse for data storage 
Icon = require('react-native-vector-icons/Ionicons'); //vector icons 

//dimensions 
var Dimensions = require('Dimensions'); 
var window = Dimensions.get('window'); 

//dynamic variable components 
var ImageButton = require('../common/imageButton'); 
//var KeywordBox = require('./onboarding/keyword-box'); 

module.exports = React.createClass({ 
    render: function() { 
     return (
      <View style={[styles.container]}> 
       <Image 
        style={styles.bg} 
        source={require('./img/login_bg1_3x.png')}> 
        <View style={[styles.header, this.border('red')]}> 
         <View style={[styles.headerWrapper]} > 
          <Image 
           resizeMode={'contain'} 
           style={[styles.onboardMsg]} 
           source={require('./img/onboard_msg.png')} > 
          </Image> 
         </View> 
        </View> 
        <View style={[styles.footer, this.border('blue')]}> 
         <ScrollView 
          horizontal={false} 
          style={styles.footerWrapperNC} 
          contentContainerStyle={[styles.footerWrapper]}> 
          {this.renderKeywordBoxes()} 
         </ScrollView> 
        </View> 
       </Image> 
      </View> 
     ); 
    }, 
    renderKeywordBoxes: function() { 
     //renders array of keywords in keyword.js 
     //and maps them onto custom component keywordbox to show in the onboarding 
     //component 
     var Keywords = ['LGBQT', '#BlackLivesMatter', 'Arts', 'Hip-Hop', 'History', 
     'Politics', 'Comedy', 'Fashion', 'Entrepreneurship', 'Technology', 'Business', 
     'International', 'Health', 'Trending', 'Music', 'Sports', 'Entertianment']; 

     return Keywords.map(function(keyword, i) { 
      return <TouchableHighlight 
       style={styles.keywordBox} 
       key={i} 
       underlayColor={'rgb(176,224,230, 0.6)'} > 
       <Text style={styles.keywordText} >{keyword}</Text> 
      </TouchableHighlight> 
     }); 
    }, 
    //function that helps with laying out flexbox itmes 
    //takes a color argument to construct border, this is an additional 
    //style because we dont want to mess up our real styling 
    border: function(color) { 
     return { 
      borderColor: color, 
      borderWidth: 4, 
     } 
    }, 
}); 

styles = StyleSheet.create({ 
    header: { 
     flex: 2, 
    }, 
    headerWrapper: { 
     flex: 1, 
     flexDirection: 'column', 
     alignItems: 'center', 
     justifyContent:'space-around', 
     marginTop: window.height/35, 
    }, 
    onboardMsg: { 
     width: (window.width/1.3), 
     height: (452/1287)*((window.width/1.3)), 
    }, 
    footer: { 
     flex: 7, 
     marginTop: window.height/35, 
    }, 
    //container style wrapper for scrollview 
    footerWrapper: { 
     flexWrap: 'wrap', 
     alignItems: 'flex-start', 
    }, 
    //non-container style wrapper for scrollview 
    footerWrapperNC: { 
     flexDirection:'row', 

    }, 
    container: { 
     flex: 1, 
     alignItems: 'center', 
     justifyContent: 'center', 
    }, 
    bg: { 
     flex: 1, 
     width: window.width, 
     height: window.height, 
    }, 
    actionButtonIcon: { 
     fontSize: 20, 
     height: 22, 
     color: 'white', 
    }, 
    keywordText: { 
     fontFamily: 'Bebas Neue', 
     fontSize: 18, 
     padding: 6, 
     fontWeight: 'bold', 
     color: 'white', 
     letterSpacing: 1.5, 
     textAlign: 'center' 
    }, 
    keywordBox: { 
     backgroundColor: 'transparent', 
     margin: 3, 
     borderColor: 'rgb(176,224,230, 0.6)', 
     borderWidth: 1, 
    }, 
}); 

Ma vorrei per raggiungere questo obiettivo:

Frame UI/UX

tutte le idee?

EDIT ** RISPOSTA:

bisogno di cambiare lo stile al seguente:

//container style wrapper for scrollview 
    footerWrapper: { 
     flexWrap: 'wrap', 
     alignItems: 'flex-start', 
     flexDirection:'row', 
    }, 
    //non-container style wrapper for scrollview 
    footerWrapperNC: { 
     flexDirection:'column', 
    }, 

Quindi l'uso di flexDirection in colonna e riga per ScrollView funziona bambini a restare in linea

risposta

31

necessario per cambiare lo stile al seguente:

//container style wrapper for scrollview 
    footerWrapper: { 
     flexWrap: 'wrap', 
     alignItems: 'flex-start', 
     flexDirection:'row', 
    }, 
    //non-container style wrapper for scrollview 
    footerWrapperNC: { 
     flexDirection:'column', 
    }, 
+0

Sembra che il flexbox cambi il paradigma di layout ntirely. Non sono sicuro che si tratti di una lacuna di React Native o se questo è il modo in cui ci si aspetta che i layout di Flexbox siano. Qualcuno può far luce su questo per me? –

+0

@KamuelaFranco questo è come dovrebbe essere FLexbox (mi dispiace per il modo in cui la risposta in ritardo!). Lo stile crea un precedente che ti obbliga a renderlo reattivo, piuttosto che usare dimensioni fisse in larghezza e altezza –