Как получить текущее количество строк в строке TextInput? - PullRequest
1 голос
/ 19 июня 2019

После ввода текста в TextInput Я хочу знать текущее количество строк в TextInput. Или же Текущее число strings также возможно.

Я пробовал string.split('\n').length, но этот код не определяет, что строка автоматически увеличивается, когда текст больше экрана.

Как узнать количество строк

Когда я делаю эту функцию в Swift Реализовано с использованием функции string.enumerateLines.

У вас есть похожая функция?

1 Ответ

2 голосов
/ 19 июня 2019

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

Мы используем метод onLayout нашего TextInput и мы отслеживаем текущую высоту.Нам нужны две переменные состояния:

this.state = {
      height: 0, // here we track the currently used height
      usedLines: 0,// here we calculate the currently used lines 
    }

onLayout:

  _onLayout(e) {
     console.log('e', e.nativeEvent.layout.height);
     // the height increased therefore we also increase the usedLine counter
     if (this.state.height < e.nativeEvent.layout.height) {
         this.setState({usedLines: this.state.usedLines+1}); 
     } 
     // the height decreased, we subtract a line from the line counter 
     if (this.state.height > e.nativeEvent.layout.height){
         this.setState({usedLines: this.state.usedLines-1}); 
     }
     // update height if necessary
     if (this.state.height != e.nativeEvent.layout.height){
         this.setState({height: e.nativeEvent.layout.height});
     }

  }

Метод визуализации

  render() {
    console.log('usedLines', this.state.usedLines);
    return (
      <View style={styles.container}>
        <TextInput multiline style={{backgroundColor: 'green'}} onLayout={(e)=> this._onLayout(e)} />
      </View>
    );
  }

Рабочий пример:

https://snack.expo.io/B1vC8dvJH

...