Как центрировать компоненты с помощью Flex в React Native?

Мне сложно централизовать свои компоненты на экране с помощью CSS.

Смотрите мой App.js:

import { Container } from 'native-base';
import React from 'react';
import { StyleSheet } from 'react-native';

import Screen from './ScreenContainer';

const styles = StyleSheet.create({
  container: {
    backgroundColor: '#FF6666',
    flex: 1
  }
});

const App = () => (
  <Provider store = {store}>
    <Container style = {styles.container}>
      <Screen />
    </Container>
  </Provider>
);

export default App;

Теперь посмотри на мой ScreenContainer.js

import { Container, Content, Form, Input, Label, Item } from 'native-base';
import React from 'react';

import AppLogo from '../components/AppLogo';

const Screen = () => (
  <Container>
    <Content>
      <AppLogo />
      <Form>
        <Item floatingLabel last>
          <Label>Username</Label>
          <Input />
        </Item>
      </Form>
    </Content>
  </Container>
);

export default Screen;

Этот код приводит к следующему экрану:

Как центрировать компоненты с помощью Flex в React Native?

Но я хочу, чтобы экран оставался в этом формате:

Как центрировать компоненты с помощью Flex в React Native?

Когда я меняю код для:

const styles = StyleSheet.create({
  container: {
    alignItems: 'center',
    backgroundColor: '#FF6666',
    flex: 1
  }
});

Мое приложение возвращает этот экран:

Как центрировать компоненты с помощью Flex в React Native?

К вашему сведению, у вас может быть больше успеха, если потенциальные ответчики поймут этот вопрос, если вы будете использовать более распространенное «центр» / «центрированный» вместо «централизованный» (особенно в заголовке).

CollinD 23.04.2018 01:38

Ty @CollinD, я меняю вопрос

FabianoLothor 23.04.2018 01:40
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
11
2
34 272
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете потратить некоторое время на чтение страницы Макет с помощью Flexbox в документации React Native; так как это даст вам лучшее представление о том, как достичь того, что вы ищете.

You can access the React Native Flexbox documentation I referred to at: https://facebook.github.io/react-native/docs/flexbox.html


В React Native компонент может указывать макет своих дочерних элементов с помощью алгоритма flexbox. Flexbox разработан для обеспечения согласованного макета на экранах разных размеров.

Вы уже использовали немного Flexbox, знали вы или нет, со стилями CSS flex: 1; и alignItems: 'center';.


Решение

В React Native Flexbox работает так же, как и в Интернете, за исключением того, что значения по умолчанию другие, а для flexDirection по умолчанию используется столбец, а не строка.

По этой причине мы можем использовать правило alignItems для стиля компонента, чтобы определить выравнивание дочерних элементов по вторичной оси (вертикальной).

Добавление следующего правила к вашим дочерним элементам приведет к тому, что они будут занимать всю ширину экрана; однако рассмотрите возможность добавления max-width для альбомной ориентации и больших экранов (например, планшета):

childSelector {
    alignItems: stretch;
}

Чтобы центрировать содержимое контейнера по горизонтали и вертикали, примените следующие правила стилизации:

alignItems: 'center'
justifyContent: 'center'

Я знаю @Trento, проблема в том, что команда alignItems работает не так, как ожидалось. : '(

FabianoLothor 23.04.2018 01:49

Проблема не устранена

FabianoLothor 23.04.2018 02:01

Извините, ваш вопрос меня смутил. См. Недавно обновленный нижний фрагмент кода с alignItems и justifyContent.

Trent 23.04.2018 02:04
Ответ принят как подходящий

Это сделано:

import { Container, Content, Form, Input, Label, Item } from 'native-base';
import React from 'react';
import { StyleSheet } from 'react-native';

import AppLogo from '../components/AppLogo';

const styles = StyleSheet.create({
  container: {},
  content: {
    alignItems: 'center',
    flex: 1,
    justifyContent: 'center'
  },
  form: {
    width: '100%'
  },
  item: {}
});

const Screen = () => (
  <Container style = {styles.container}>
    <Content contentContainerStyle = {styles.content}>
      <AppLogo />
      <Form style = {styles.form}>
        <Item floatingLabel last>
          <Label>Username</Label>
          <Input />
        </Item>
      </Form>
    </Content>
  </Container>
);

export default Screen;

Самый простой способ:

    <View style = {{jusifyContent: "center", alignItems: "center"}}>
      <Text>I'm an element</Text>
      <Text>I'm another element</Text>
    </View>

Свойство css flex значительно упростит нам все задачи по выравниванию. Вы можете использовать class = "row" или можете использовать встроенные стили, такие как style = {{ display: 'flex, justContent: 'center', alignItems: 'center', это идеально выровняет все в центре родительского div.

<div style = {{ display: 'flex', justifyContent: 'center'}}>
    <div>Child1</div>
    <div>Child2</div>
</div>

Другие вопросы по теме