UITextView с contentInset: ввод текста вызывает скачки содержимого - PullRequest
0 голосов
/ 02 июля 2019

У меня есть UITextView, позволяющий пользователю вводить многострочные тексты.Когда текст превышает размер TextView, он должен начать прокрутку.

Когда выскакивает экранная клавиатура, я устанавливаю высоту клавиатуры как bottom-contentInset для TextView, чтобы уменьшить проблему с наложением TextView на клавиатуру.Однако, когда contentInset больше, чем высота фрейма TextView, его содержимое начинает прыгать при попытке ввода текста.Знак ввода текста выпадает из поля зрения, и при каждом нажатии клавиши весь текстовый контент перепрыгивает вверх и вниз, по существу делая невозможным ввод текста.

Это может быть воспроизведено без какого-либо кода, так что это не ошибка кода, апроблема поведения компонента:

  • создание представления с помощью viewcontroller, отключение автоматической разметки.
  • добавление UITextView в представление (можно оставить текст lorem-ipsum в нем)
  • заставить UITextView высоту 400
  • добавить contentInset 500 в конец UITextView
  • , запустить на устройстве или в симуляторе

Как тольковы дотрагиваетесь до UITextView, чтобы сфокусировать его, чтобы начать печатать все, что подпрыгивает, а курсор / каретка ввода текста выходит из поля зрения и начинает ошибочно прыгать.

Что я делаю не так или как этого можно избежать?

1 Ответ

1 голос
/ 02 июля 2019

Отвечая на мой собственный вопрос:

В документации Apple рекомендуется использовать свойство contentInset для предотвращения наложения клавиатуры на ключевые части вашего пользовательского интерфейса.Однако, как я выяснил выше, это не работает для UITextViews ...

Вместо этого вы должны использовать свойство textContainerInset!Это ведет себя как ожидалось.

- (void)keyboardWasShown:(NSNotification*)aNotification {

    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake( 0, 0, kbSize.height, 0 );
    textView.textContainerInset = contentInsets;
    textView.scrollIndicatorInsets = contentInsets;
}

- (void)keyboardWillBeHidden:(NSNotification*)aNotification {
    UIEdgeInsets contentInsets = UIEdgeInsetsZero;
    textView.textContainerInset = contentInsets;
    textView.scrollIndicatorInsets = contentInsets;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...