Сховати клавіатуру у реальній реакції


448

Якщо я натисніть на текстовий ввід, я хочу мати можливість натиснути ще десь, щоб знову відхилити клавіатуру (не клавіша повернення). Я не знайшов найменшої інформації, що стосується цього, у всіх підручниках та публікаціях блогу, які я прочитав.

Цей основний приклад досі не працює для мене з натисненням реакції 0.4.2 в симуляторі. Неможливо спробувати його на своєму iPhone.

<View style={styles.container}>
    <Text style={styles.welcome}>
      Welcome to React Native!
    </Text>
    <Text style={styles.instructions}>
      To get started, edit index.ios.js
    </Text>
    <Text style={styles.instructions}>
      Press Cmd+R to reload,{'\n'}
      Cmd+D or shake for dev menu
    </Text>
    <TextInput
      style={{height: 40, borderColor: 'gray', borderWidth: 1}}
      onEndEditing={this.clearFocus}
    />
  </View>


Правильна відповідь має бути, що Ерік Кім нижче. Відповідь ScrollView (встановити прокручуваний на хибний) не є ідеальним, якщо у вас є кілька введень тексту, це не дозволяє переходити від введення тексту до введення тексту, не відхиляючи клавіатуру.
бегемот

2
Тим, хто бажає вирішити весь додаток, див. Відповідь @ Скотмаса нижче. (Посилання: stackoverflow.com/a/49825223/1138273 )
Хамед

Відповіді:


563

Проблема з відхиленням клавіатури стає ще серйознішою, якщо у вас є keyboardType='numeric', оскільки немає можливості її звільнити.

Заміна перегляду на ScrollView не є правильним рішенням, так як якщо у вас є декілька textInputs або buttons, натискання на них під час роботи клавіатури відхиляє лише клавіатуру.

Правильний спосіб - це інкапсуляція Перегляду TouchableWithoutFeedbackта викликKeyboard.dismiss()

EDIT: Тепер ви можете використовувати ScrollViewз keyboardShouldPersistTaps='handled'тільки закрити клавіатуру , коли кран не обробляються дітьми (тобто натиснувши на інших textInputs або кнопках.)

Якщо у вас є

<View style={{flex: 1}}>
    <TextInput keyboardType='numeric'/>
</View>

Змініть його на

<ScrollView contentContainerStyle={{flexGrow: 1}}
  keyboardShouldPersistTaps='handled'
>
  <TextInput keyboardType='numeric'/>
</ScrollView>

або

import {Keyboard} from 'react-native'

<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
    <View style={{flex: 1}}>
        <TextInput keyboardType='numeric'/>
    </View>
</TouchableWithoutFeedback>

EDIT: Ви також можете створити компонент вищого порядку для відхилення клавіатури.

import React from 'react';
import { TouchableWithoutFeedback, Keyboard, View } from 'react-native';

const DismissKeyboardHOC = (Comp) => {
  return ({ children, ...props }) => (
    <TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
      <Comp {...props}>
        {children}
      </Comp>
    </TouchableWithoutFeedback>
  );
};
const DismissKeyboardView = DismissKeyboardHOC(View)

Просто використовуйте його так

...
render() {
    <DismissKeyboardView>
        <TextInput keyboardType='numeric'/>
    </DismissKeyboardView>
}

ПРИМІТКА. accessible={false}Потрібно, щоб форма введення надалі була доступною через VoiceOver. Люди з вадами зору будуть вам вдячні!


28
Це чудово. Єдиний коментар, який я маю, - це те, що ви могли використовувати офіційну api-клавіатуру в RN і називали Keyboard.dismiss () замість того, щоб викликати якусь внутрішню утиліту RN dismissKeyboard (). Але обидва працюють нормально.
Павло Лекич

@PavleLekic Вибачте за затримку, я оновив відповідь разом із методом HOC
Ерік Кім

3
Це чудово працює. Мені довелося трохи змінити синтаксис для визначення функції стрілки, щоб усунути несподівану помилку лексеми в RN: const DismissKeyboardHOC = (Comp) => {
jwinn

2
Я не можу отримати onPressза TouchableWithoutFeedbackпожежа незалежно від того , що я намагаюся
Бред Райан

1
Навіщо створювати HoC і просто додавати це у корінь дерева додатків /
Димитрій Копріва,

248

Це лише оновлено та задокументовано ! Більше немає прихованих хитрощів.

import { Keyboard } from 'react-native'

// Hide that keyboard!
Keyboard.dismiss()

https://github.com/facebook/react-native/pull/9925


4
Дякуємо, що додали це. Я сподіваюся, що ваша відповідь буде до верху. Я майже пропустив це і використав застаріле рішення.
вівчарка

2
Pinging @MrMuetze змінив це як правильну відповідь
jehna1

8
Це не слід вибирати як найкращу відповідь. Питання задає питання, як відмовитись від клавіатури, коли натискаєш її поза нею. Ця відповідь просто забезпечує API для цього, тоді як фактична найкраща відповідь забезпечує працездатну реалізацію.
jskidd3

ви можете використовувати наступну бібліотеку: KeyboardAwareScrollView
Алехандро Гонсалес

97

використовувати це для митного звільнення

var dismissKeyboard = require('dismissKeyboard');

var TestView = React.createClass({
    render: function(){
        return (
            <TouchableWithoutFeedback 
                onPress={dismissKeyboard}>
                <View />
            </TouchableWithoutFeedback>
        )
    }
})

Це не задокументовано, але зразки в нативному реакторі github repo використовують його декілька разів.
Сярул

7
Цікаво, що для тих, хто цікавиться, звідки це походить, це бібліотека Utility у React Native. Ось джерело: github.com/facebook/react-native/blob/master/Libraries/…
Джошуа Пінтер

1
Чомусь не вийшло, коли я спробувавreact-native-search-bar
Пітер Г.

Це точний еквівалент Keyboard.dismiss, який є кращим, оскільки це документально підтверджено. github.com/facebook/react-native/blob/…
Рікардо Стувен

88

Використовуйте реактивні Native's Keyboard.dismiss()

Оновлений відповідь

React Native виявив статичний dismiss()метод на Keyboard, тому оновлений метод:

import { Keyboard } from 'react-native'; 

Keyboard.dismiss()

Оригінальний відповідь

Використовуйте dismissKeyboardбібліотеку React Native .

У мене була дуже схожа проблема і я відчував, що я єдиний, хто цього не зрозумів.

ScrollViews

Якщо у вас є ScrollViewабо щось, що успадковується від нього, як а ListView, ви можете додати опору, яка автоматично відхилить клавіатуру на основі подій натискання або перетягування.

Реквізит є keyboardDismissModeі може мати значення none, interactiveабо on-drag. Більше про це можна прочитати тут .

Регулярні перегляди

Якщо у вас є щось, окрім а, ScrollViewі ви хочете, щоб будь-які натискання відхиляли клавіатуру, ви можете скористатися простим TouchableWithoutFeedbackі onPressвикористовувати утиліту "React Native", dismissKeyboardщоб відхилити клавіатуру для вас.

У вашому прикладі ви можете зробити щось подібне:

var DismissKeyboard = require('dismissKeyboard'); // Require React Native's utility library.

// Wrap your view with a TouchableWithoutFeedback component like so.

<View style={styles.container}>

  <TouchableWithoutFeedback onPress={ () => { DismissKeyboard() } }>

    <View>

      <Text style={styles.welcome}>
        Welcome to React Native!
      </Text>

      <Text style={styles.instructions}>
        To get started, edit index.ios.js
      </Text>

      <Text style={styles.instructions}>
        Press Cmd+R to reload,{'\n'}
        Cmd+D or shake for dev menu
      </Text>

      <TextInput style={{height: 40, borderColor: 'gray', borderWidth: 1}} />

    </View>

  </TouchableWithoutFeedback>

</View>

Примітка: TouchableWithoutFeedbackможе мати лише одну дитину, тому вам потрібно загортати все, що знаходиться під нею, як єдину, Viewяк показано вище.


4
Реагувати Native впливу статичного dismiss()методу на клавіатурі, тому оновлений метод: import { Keyboard } from 'react-native'; Keyboard.dismiss().
Джошуа Пінтер

1
У мене є клавіатура, яка звисає, оскільки я зробив перезавантаження, зосередившись на полі введення. в цьому випадку Keyboard.dismiss()нічого не робить, оскільки його реалізація не залежить від того, щоб бути зосередженим на вході, яким я більше не є.
pstanton

@pstanton Що тоді потрібно було зробити, щоб відхилити клавіатуру?
Джошуа Пінтер

Я не міг знайти, тому я змушував закрити!
pstanton

41

Проста відповідь - використовувати ScrollView замість View і встановити властивість прокрутки на false (хоч, можливо, потрібно буде відрегулювати деякі стилі).

Таким чином, клавіатура звільняється в той момент, коли я натискаю десь ще. Це може бути проблемою з нативними реакціями, але, здається, події з натисканням обробляються лише за допомогою ScrollViews, що призводить до описаної поведінки.

Редагувати: Завдяки jllodra. Зауважте, що якщо натиснути безпосередньо на інший Textinput, а потім зовні, клавіатура все одно не буде ховатися.


1
Він працює з переглядом прокрутки, але все ж є випадки, коли я можу натиснути кнопку, щоб змінити вигляд, використовуючи навігатор і клавіатуру, які все ще тримаються внизу, і мені потрібно вручну натиснути клавішу повернення, щоб закрити її :(
Piyush Chauhan

1
Клавіатура ховається, коли ви торкаєтесь за межами TextInput, але якщо (замість натискання зовні) ви натискаєте інший TextInput і, нарешті, натискаєте зовні, клавіатура не ховається. Випробувано на 0,6.0.
jllodra

Зараз я бачу іншу поведінку. При натисканні поза TextInput прихована клавіатура, навіть якщо я натискаю безпосередньо на інший TextInput - це проблема, тому що вам потрібно двічі натиснути інший TextInput, щоб мати можливість вводити її! Зітхнути. (з 0,19 RN)
Провулок Реттіг

1
Ви можете встановити прокручуваний на істинний і використовувати клавіатуруShouldPersistTaps = {'обробляється'} і клавіатуруDismissMode = {'on-drag'}, щоб досягти такого ж ефекту
Ерік Вінер

для мене працював лише прокрутка, я не знаю чому, прийнята відповідь, коли я ввожу номер клавіатури відхиляє
Івон Хуйн

33

Ви можете імпортувати keyboard з рідних реакцій, як нижче:

import { Keyboard } from 'react-native';

і у вашому коді може бути щось подібне:

render() {
    return (
      <TextInput
        onSubmit={Keyboard.dismiss}
      />
    );
  }

статичне відхилення ()

Відхиляє активну клавіатуру та знімає фокус.


Мені це не потрібно було static dismiss(). Я щойно додав Keyboard.dismiss()до свого методу onSubmit (деonSubmitEditing={() => {this.onSubmit()}})
SherylHohman

30

Я абсолютно новий в React і зіткнувся з точно такою ж проблемою під час створення демо-програми. Якщо ви використовуєте onStartShouldSetResponderреквізит (описаний тут ), ви можете схопити штрихи на звичайній старій React.View. Цікаво почути думки досвідченіших реакторів щодо цієї стратегії / якщо є краща, але саме це працювало для мене:

containerTouched(event) {
  this.refs.textInput.blur();
  return false;
}

render() {
  <View onStartShouldSetResponder={this.containerTouched.bind(this)}>
    <TextInput ref='textInput' />
  </View>
}

Тут слід зазначити 2 речі. По-перше, як обговорювалося тут , ще не існує способу завершити редагування всіх підпрепаратів, тому нам доведеться звернутися TextInputбезпосередньо до розмивання. По-друге, onStartShouldSetResponderперехоплений іншими керуючими елементами управління поверх нього. Тож натискання на TouchableHighlightінше (включаючи інше TextInput) у вікні контейнера не призведе до події. Однак натискання на Imageпанель перегляду контейнера все одно відхилить клавіатуру.


Це безумовно працює. Але, як ви сказали, мені цікаво також, якщо це правильний шлях. Сподіваюсь, вони скоро вирішать це ( github.com/facebook/react-native/isissue/113 )
mutp

Чудово це працювало для мене. Мій погляд прокрутки не працював із дотичними методами! Дякую!
Джеймс Трікі

24

Використовуйте ScrollViewзамість Viewта встановіть keyboardShouldPersistTapsатрибут у значення false.

<ScrollView style={styles.container} keyboardShouldPersistTaps={false}>
    <TextInput
        placeholder="Post Title"
        onChange={(event) => this.updateTitle(event.nativeEvent.text)}
        style={styles.default}/>
 </ScrollView>

Згідно з документацією, keyboardShouldPersistTapsатрибут за замовчуванням є false, коли використовується a ScrollView. Щойно я оновив свою реакцію на останню версію, і проблема з переходом на секунду TextInputвсе ще зберігається. Клавіатура тоді не допустима. Ви знайшли рішення для цієї конкретної проблеми?
TurboFish

1
Документи були невірними, але зараз вони були оновлені, дивіться цей PR: github.com/facebook/react-native/isissue/2150
Ryan McDermott

Що робить keyboardShouldPersistTaps? Чому це актуально тут? Спасибі
Лейн Реттіг

1
Попередження: 'keyboardShouldPersistTaps = {false}' застаріло. Використовуйте замість 'keyboardShouldPersistTaps = "ніколи"
Мілан Ракос

13

Якщо комусь потрібен робочий приклад того, як відхилити багаторядковий ввід тексту, ось вам! Сподіваюсь, це допомагає деяким людям там, документи взагалі не описують спосіб відхилити багаторядковий вхід, принаймні не було конкретної посилання на те, як це зробити. І все-таки noob фактично розміщувати тут на стеці, якщо хтось думає, що це має бути посиланням на фактичну посаду, яку написав цей фрагмент, дайте мені знати.

import React, { Component } from 'react'
import {
  Keyboard,
  TextInput,
  TouchableOpacity,
  View,
  KeyboardAvoidingView,
} from 'react-native'

class App extends Component {
  constructor(props) {
    super(props)
    this.state = {
      behavior: 'position',
    }
    this._keyboardDismiss = this._keyboardDismiss.bind(this)
  }

  componentWillMount() {
    this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this._keyboardDidHide);
  }

  componentWillUnmount() {
    this.keyboardDidHideListener.remove()
  }

  _keyboardDidHide() {
    Keyboard.dismiss()
  }

  render() {
    return (
      <KeyboardAvoidingView
        style={{ flex: 1 }}
        behavior={this.state.behavior}
      >
        <TouchableOpacity onPress={this._keyboardDidHide}>
          <View>
            <TextInput
              style={{
                color: '#000000',
                paddingLeft: 15,
                paddingTop: 10,
                fontSize: 18,
              }}
              multiline={true}
              textStyle={{ fontSize: '20', fontFamily: 'Montserrat-Medium' }}
              placeholder="Share your Success..."
              value={this.state.text}
              underlineColorAndroid="transparent"
              returnKeyType={'default'}
            />
          </View>
        </TouchableOpacity>
      </KeyboardAvoidingView>
    )
  }
}

11

Оновлено використання ScrollViewдляReact Native 0.39

<ScrollView scrollEnabled={false} contentContainerStyle={{flex: 1}} />

Хоча, проблема з двома TextInputящиками все ще існує . напр. Форма імені користувача та пароля тепер відхилить клавіатуру при переключенні між входами. Хочеться отримати кілька пропозицій, щоб зберегти живу клавіатуру під час переключення між TextInputsрежимами користування ScrollView.


3
Здається, що 0.40оновлення keyboardShouldPersistTapsвід а booleanдо значення enumз можливим значенням "обробляється", яке, як передбачається, виправить це.
Аншул Кока

11

Якщо ви керуєте подією, якою onPressви користуєтесь, ви можете скористатися кількома способами :

import { Keyboard } from 'react-native'

onClickFunction = () => {
     Keyboard.dismiss()
}

якщо ви хочете закрити клавіатуру під час використання прокрутки:

<ScrollView keyboardDismissMode={'on-drag'}>
     //content
</ScrollView>

Більше варіанту є те, коли користувач клацає за межами клавіатури:

<KeyboardAvoidingView behavior='padding' style={{ flex: 1}}>
    //inputs and other content
</KeyboardAvoidingView>

1
Хлопці, питання все ще актуальне, але питання 4 роки (зараз кінець 2019 року). RN зараз дуже простий у використанні. Ми повинні переглянути всі здібності, за допомогою яких ми можемо досягти вирішення цього питання. Дозвольте схвалити цей коментар!
Посилання

@ Посилання Привіт спасибі! Я абсолютно згоден
Ідан

10
const dismissKeyboard = require('dismissKeyboard');
dismissKeyboard(); //dismisses it

Підхід №2;

Завдяки користувачеві @ ricardo-stuven за вказівку на це, є ще один кращий спосіб відхилити клавіатуру, яку ви можете побачити на прикладі в реагуючих нативних документах.

Простий імпорт Keyboardта виклик - це методdismiss()


1
Це точний еквівалент Keyboard.dismiss, який є кращим, оскільки це документально підтверджено. github.com/facebook/react-native/blob/…
Рікардо Стувен

На той момент, коли я давав цю відповідь, це не було задокументоване. Дякуємо, що згадали про це. Я оновлю свою відповідь.
Адель Імран

10

Обгортання компонентів у форматі TouchableWithoutFeedbackможе спричинити деякі дивні поведінки прокрутки та інші проблеми. Я вважаю за краще загортати найпопулярніший додаток у a Viewіз onStartShouldSetResponderвластивістю, заповненим. Це дозволить мені обробляти всі незроблені дотики, а потім відхиляти клавіатуру. Важливо, оскільки функція обробника повертає помилкову, подія дотику поширюється як звичайна.

 handleUnhandledTouches(){
   Keyboard.dismiss
   return false;
 }

 render(){
    <View style={{ flex: 1 }} onStartShouldSetResponder={this.handleUnhandledTouches}>
       <MyApp>
    </View>
  }

Дякуємо за вашу відповідь @Scottmas. Я в кінцевому рахунку використовував його замість TouchableWithoutFeedback, через ваш коментар "дивна прокрутка та інші проблеми". Але якщо я не сліпо довіряв твоїм словам, ти можеш детальніше розказати свій коментар? :)
kuhr

8

Я щойно перевірив це, використовуючи останню версію React Native (0.4.2), і клавіатура відхиляється, коли ви натискаєте в іншому місці.

І FYI: ви можете встановити функцію зворотного дзвінка, яку потрібно виконати, коли ви відхиляєте клавіатуру, призначивши її підпору "onEndEditing".


Я налагоджував зворотний виклик "onEndEditing", але він ніколи не спрацьовував; Я збираюся розглянути це з новою версією реагувати рідними, дякую за вашу пропозицію
TurboFish

7

Якщо я не помиляюсь, остання версія React Native вирішила цю проблему щодо можливості відхилити клавіатуру, натиснувши на неї.


4
Чи могли б ви вказати, яка частина їх коду / документа це робить? Я зіткнувся з тим же питанням, і я дуже ціную це, вказуючи мені напрямок :)
Оказакі Міяма Юта

Підтверджено, що це все ще проблема станом на 0,19 RN (остання).
Лейн Реттіг

Проблема з RN 0,28
бегемот

7

Як щодо розміщення дотикового компонента навколо / біля TextInput?

var INPUTREF = 'MyTextInput';

class TestKb extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <View style={{ flex: 1, flexDirection: 'column', backgroundColor: 'blue' }}>
                <View>
                    <TextInput ref={'MyTextInput'}
                        style={{
                            height: 40,
                            borderWidth: 1,
                            backgroundColor: 'grey'
                        }} ></TextInput>
                </View>
                <TouchableWithoutFeedback onPress={() => this.refs[INPUTREF].blur()}>
                    <View 
                        style={{ 
                            flex: 1, 
                            flexDirection: 'column', 
                            backgroundColor: 'green' 
                        }} 
                    />
                </TouchableWithoutFeedback>
            </View>
        )
    }
}

6

Оберніть весь ваш компонент:

import { TouchableWithoutFeedback, Keyboard } from 'react-native'

<TouchableWithoutFeedback onPress={() => Keyboard.dismiss()}>
...
</TouchableWithoutFeedback>

Працювали для мене



4

Модуль клавіатури використовується для управління подіями клавіатури.

  • import { Keyboard } from 'react-native'
  • Додайте нижче код у методі візуалізації.

    render() { return <TextInput onSubmitEditing={Keyboard.dismiss} />; }

Ви можете використовувати -

Keyboard.dismiss()

static dismiss () Відхиляє активну клавіатуру та видаляє фокус відповідно до реалізованих нативних документів.


3

Перша імпортна клавіатура

import { Keyboard } from 'react-native'

Потім всередині вашого TextInputдодати Keyboard.dismissв onSubmitEditingопору. У вас повинно бути щось таке:

render(){
  return(
    <View>
      <TextInput 
        onSubmitEditing={Keyboard.dismiss}
       />
    </View>
  )  
}

1
Більше контексту було б непогано.
коллідір

2

Використання keyboardShouldPersistTapsв ScrollViewвас може перейти в «обробляється», яка займається питаннями , що люди говорять , приходить за допомогою Scrollview. Це те, що йдеться в документації про використання 'обробляється': the keyboard will not dismiss automatically when the tap was handled by a children, (or captured by an ancestor). Ось , де це посилання.


Це працювало для мене! (однак мені довелося додати його всередині своєї сторонньої бібліотеки react-native-keyboard-aware-scroll-view).
Нік Грілі

1

у ScrollViewкористуванні

keyboardShouldPersistTaps="handled" 

Це зробить вашу роботу.


1

Існує багато способів впоратися з цим, відповіді вище не містять, returnTypeоскільки він не був включений до того часу, коли він реагував.

1: Ви можете вирішити це, загорнувши компоненти в ScrollView, за замовчуванням ScrollView закриває клавіатуру, якщо ми десь натиснемо. Але у випадку, якщо ви хочете використовувати ScrollView, але вимкнути цей ефект. ви можете використовувати підказку pointerEvent для scrollView pointerEvents = 'none'.

2: Якщо ви хочете закрити клавіатуру натисканням кнопки, ви можете просто скористатися Keyboardзreact-native

import { Keyboard } from 'react-native' and inside onPress of that button, you can useKeyboard.dismiss () '.

3: Ви також можете закрити клавіатуру, натискаючи клавішу повернення на клавіатурі, ПРИМІТКА. Якщо тип вашої клавіатури чисельний, у вас не буде ключа повернення. Отже, ви можете ввімкнути це, надавши йому опору, returnKeyType done. або ви можете скористатися. onSubmitEditing={Keyboard.dismiss}Він дзвонить, коли ми натискаємо клавішу повернення І якщо ви хочете відхилити клавіатуру, втрачаючи фокус, ви можете використовувати опору onBlur,onBlur = {Keyboard.dismiss}


0

Keyboard.dismiss()зробимо це. Але іноді це може втратити фокус, і клавіатура не зможе знайти посилання. Найбільш послідовний спосіб зробити це ввести ref=_reftextInput і робити, _ref.blur()коли вам потрібно відхилити, і _ref.focus()коли вам потрібно повернути клавіатуру.



0

Ось моє рішення щодо відхилення та прокрутки клавіатури до вибору TextInput (я використовую ScrollView з підтримкою клавіатуриDismissMode):

import React from 'react';
import {
  Platform,
  KeyboardAvoidingView,
  ScrollView
} from 'react-native';

const DismissKeyboard = ({ children }) => {
  const isAndroid = Platform.OS === 'android';
  const behavior = isAndroid ? false : 'padding';

  return (
    <KeyboardAvoidingView
      enabled
      behavior={ behavior }
      style={{ flex: 1}}
    >
      <ScrollView
        keyboardShouldPersistTaps={'always'}
        keyboardDismissMode={'on-drag'}
      >
        { children }
      </ScrollView>
    </KeyboardAvoidingView>
  );
};

export default DismissKeyboard;

використання:

render(){
   return(
     <DismissKeyboard>
       <TextInput
        style={{height: 40, borderColor: 'gray', borderWidth: 1}}
        onChangeText={(text) => this.setState({text})}
        value={this.state.text}
      />
     </DismissKeyboard>
   );
}


0

користуйтеся цим пакетом react-native-keyboard-aware-scroll-view

використовувати цей компонент як свій кореневий компонент

оскільки цей пакет react-native-keyboard-aware-scroll-viewтакож має scrollView, вам потрібно додати його до нього:

<KeyboardAwareScrollView keyboardShouldPersistTaps="handled"> <ScrollView keyboardShouldPersistTaps="handled"></ScrollView> </KeyboardAwareScrollView>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.