Как выровнять элемент с Flatlist в React-Native

Итак, я визуализирую сообщения в нативном режиме реакции, и на самом деле я хочу создать визуальную структуру как типичные чаты (где текстовый ввод выровнен снизу, а сообщения идут вверх)

Но я точно не знаю, как это сделать в React-Native, Вот как это выглядит https://ibb.co/muJino

и вот мой код:

<View>

                <View style = {{justifyContent: 'space-between'}}>
                    <TextInput
                        placeholder = "Message"
                        onChangeText = {Message => this.setState({message: Message})}
                    />
                    <Button title = "Send"/>
                </View>


                <FlatList
                    data = {this.state.chats}
                    renderItem = {this._renderItem}
                    keyExtractor = {this._keyExtractor}
                />

</View>

Как мне сделать укладку так, как я хочу? Заранее спасибо.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
2 699
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Чтобы текст располагался внизу, просто поместите его после FlatList.

<View>
    <FlatList/>
    <TextInput/>
</View>

В этом случае ему придется прокрутить страницу до конца, чтобы увидеть ввод. Что ему нужно сделать, так это позиционировать ввод как абсолютный и прикрепить его к нижней части экрана. Я создам пример, если у вас будет время.

Tarik Fojnica 08.06.2018 23:38

Да, точно.. :/

Berke 09.06.2018 00:00

Вы можете использовать этот код, чтобы прикрепить TextInput к нижней части экрана, а FlatList к верхней части экрана:

<View style = {{ flex: 1 }}>
     <FlatList data = {this.data}
          renderItem = {({ item, index }) => {
              return (
                  <Text>{item}</Text>
              )
          }} 
     />
     <View style = {{ flexDirection: 'row' }}>
          <Button title = {'send'} onPress = {() => { }} />
          <TextInput style = {{ flex: 1, borderWidth: 1 }} />
     </View>
</View>

Надеюсь, это поможет.

Обновлено:

для абсолютного позиционирования лучше динамически устанавливать позицию следующим образом:

<View style = {{position: 'absolute', width: "100%", backgroundColor: 'beige', marginTop: (Dimensions.get('window').height - 60) }}>
   <TextInput
          style = {{height:30}}
          placeholder = "Message"
          onChangeText = {Message => this.setState({message: Message})}
     />
  <Button style = {{height:30}} title = "Send"/>

(Код не проверял, меняйте цифры, если они неточные)

Мне интересно, почему это не работает для вас! flex: 1 для представления контейнера заставляет TextInput прилипать ко дну, а FlatList - к вершине для меня

Ali SabziNezhad 09.06.2018 13:05

Я не знаю, дружище, но я нашел решение, вы также можете проверить это.

Berke 09.06.2018 13:16

взгляните на мою правку. используйте "Размеры", чтобы задать динамическое поле. приятный код :)

Ali SabziNezhad 09.06.2018 13:23
Ответ принят как подходящий

Ребят я сам нашел решение. Иногда нам нужно думать легко, поэтому я использовал position: «absolute», и теперь оно остается таким, как я хочу.

<View style = {{position: 'absolute', width: "100%", backgroundColor: 'beige', bottom: 0}}>
       <TextInput
              placeholder = "Message"
              onChangeText = {Message => this.setState({message: Message})}
         />
      <Button title = "Send"/>
</View>

https://ibb.co/gTjD58

установка статического числа для marginTop может вызвать проблемы в дифференцированном устройстве. Лучше не использовать абсолютное позиционирование, кроме критических ситуаций.

Ali SabziNezhad 09.06.2018 13:03

Вместо marginTop: 440 попробуйте с bottom: 0. Так безопаснее.

Tarik Fojnica 09.06.2018 18:59

ОК, проверю :) Спасибо!

Berke 09.06.2018 22:57

Да внизу: 0 сработало и выглядит намного безопаснее, спасибо tarik!

Berke 11.06.2018 02:33

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