Absolute i Flexbox w React Native

99

Chciałbym umieścić biały pasek, który zajmowałby całą szerokość u dołu ekranu. W tym celu pomyślałem o zastosowaniu absolutepozycjonowania z odziedziczonymi flexboxparametrami.

Z następującego kodu renderuje coś jak ten .

Oto mój kod:

var NavigationBar = React.createClass({
  render: function() {
    return(
    <View style={navigationBarStyles.navigationBar}>
      //Icon 1, Icon 2...
    </View>
    );
  }
});

var Main = React.createClass({
  render: function() {
    return(
      <View style={mainStyles.container}>
          <NavigationBar />
      </View>
    );
  }
});

var mainStyles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#456783',
  }
});

var navigationBarStyles = StyleSheet.create({
  navigationBar: {
    backgroundColor: '#FFFFFF',
    height: 30,
    position: 'absolute', 
    flexDirection: 'row',
    bottom: 0,
    justifyContent: 'space-between'
  },
});

Jestem nowy w stylizacji w CSS i nie wszystkie właściwości są dostępne w React-Native. Więc każda pomoc jest mile widziana, dzięki :)

ilansas
źródło

Odpowiedzi:

163

Ok, rozwiązałem mój problem, jeśli ktoś przechodzi obok to odpowiedź:

Po prostu musiałem dodać left: 0,i top: 0,do stylów i tak, jestem zmęczony.

position: 'absolute',
left:     0,
top:      0,
ilansas
źródło
10
Dzięki za opublikowanie tego. I wydaje się, że podobnie jest z wysokością - zamiast height:100%, zrób top:0, bottom:0.
Premasagar
4
ale jeśli chcesz umieścić pasek na dole i na pełnej szerokości, powinieneś dodać left:0, right:0i nie dodawać top:0, jeśli ustawisz top:0i bottom:0, wyświetli się na pełnym ekranie.
Spark.Bao
1
Jak mogę wyśrodkować? Na przykład chcę pokazać tarczę na górze mojego komponentu i chcę, aby tarcza była absolutna i wyśrodkowana?
Murat Ozgul
1
Za wypełnienie całej przestrzeni w pionie absolutnie pozycjonowanym dzieckiem, które dodało top:0i bottom:0pracowało jako zamiennik `` height: 100% '' do @Premasagar
Nick Pineda
1
Jus add left, top, righti bottondo 0 i działa idealnie.
jose920405
65

Pierwszym krokiem byłoby dodanie

position: 'absolute',

jeśli chcesz, aby element miał pełną szerokość, dodaj

left: 0,
right: 0,

następnie, jeśli chcesz umieścić element na dole, dodaj

bottom: 0,
// don't need set top: 0

jeśli chcesz umieścić element na górze, zamień bottom: 0natop: 0

Spark.Bao
źródło
4

To rozwiązanie zadziałało dla mnie:

tabBarOptions: {
      showIcon: true,
      showLabel: false,
      style: {
        backgroundColor: '#000',
        borderTopLeftRadius: 40,
        borderTopRightRadius: 40,
        position: 'relative',
        zIndex: 2,
        marginTop: -48
      }
  }
Alex
źródło