Я пытаюсь добиться аналогичного поведения позиционирования, как нижняя строка ввода текста приложения Apple Messages.
Я пробовал много подходов, искал высоко и низко, и есть много похожих вопросов, но ни один из них не был удовлетворительным.
Чтобы указать:
- В нижней части представления есть
UIToolbar
- Панель инструментов должна следовать за клавиатурой, когда клавиатура появляется и исчезает
- Панель инструментов должна оставаться на клавиатуре, когда клавиатура видна.
- Когда клавиатура скрыта, панель инструментов остается ( "состыкована" ) в нижней части представления
Предлагаемые решения:
Вручную оживить панель инструментов в ответ на уведомления о появлении клавиатуры
Это решение не соответствует специальному случаю второго требования (панель инструментов должна следовать за клавиатурой, когда клавиатура появляется и исчезает):
- В iOS 7 была введена
UIScrollViewKeyboardDismissMode
. Это позволяет интерактивный жест для отклонения клавиатуры. Когда пользователь катится мимо верхнего края клавиатуры, постепенно меняется рамка клавиатуры. Это решение ничего не делает для размещения этого поведения и просто оставляет панель инструментов в анимированной позиции.
Кроме того, это решение также не может выполнить специальный случай третьего требования (панель инструментов должна оставаться на клавиатуре, когда клавиатура видна):
- Вращение. Это решение требует дополнительного, досадно постороннего кода (как мы увидим в следующем предлагаемом решении) для поворота панели инструментов в ответ на вращение устройства.
Другая проблема с этим решением:
- Высота клавиатуры. С помощью этого решения панель инструментов не считается частью высоты клавиатуры, поэтому необходимо добавить дополнительный код для обеспечения правильной вставки содержимого.
Следующее предлагаемое решение:
Используйте UIResponder
inputAccessoryView
Это решение похоже на то, как Apple намерена поддерживать такое поведение, поскольку оно решает все недостатки ручной анимации панели инструментов. Но это решение полностью пропускает четвертое требование (когда клавиатура скрыта, панель инструментов остается ( "состыкована" ) в нижней части представления).
Кажется, что решение состоит в использовании UIResponder
inputAccessoryView
, но каким-то образом сделать inputAccessoryView
не перемещаться под представлением. Я ищу чистый код для этого. Существуют продуманные, почти благородные попытки в другом месте, но, как уже упоминалось, они не отвечают требованиям.
В моем конкретном случае я использую панель инструментов UINavigationController
, которая влечет за собой дополнительные проблемы, поскольку это не предназначено для UINavigationController
. Независимо от того, я готов представить некоторые хакерские исправления, чтобы выполнить это.