В настоящее время я пытаюсь реализовать и точную копию Apples iMessage App.
Это означает, что мне нужен UITextView, который закреплен в нижней части экрана и перемещается вверх, когда он становится firstResponder. - Это довольно легко на самом деле. Существует несколько способов сделать это, и два из наиболее распространенных - это, конечно, анимация представления вверх или вниз, если получено уведомление . Другой - сделать это через inputAccessoryView . К сожалению, некоторые функции у одного есть, у другого нет. И они кажутся взаимоисключающими.
Большая проблема - вращение .
Я пробежал примерно по крайней мере семь различных проектов github, каждый из которых повторно реализовывал ту же функциональность / поведение, которого я пытаюсь достичь, но буквально все они терпели неудачу с треском.
Например, HPGrowingTextView, который используют официальные приложения Facebook / FacebookMessenger / (и, возможно, WhatsApp), представляет собой большой кусок мусорного кода. Возьмите iDevice, откройте приложение Facebook, перейдите в чат, нажмите на клавиатуру и поверните устройство. Если вы обратите внимание, вы заметите, что панель ввода слегка подпрыгивает и оставляет некоторое пространство между рамкой клавиатуры и ее собственной. Затем посмотрите на реализацию Apples в iMessage, когда клавиатура отображается. Это прекрасно.
Кроме этого, взлом содержимогоOffset и EdgeInset, которые использует библиотека HPGrowingTextView, дает мне кошмары.
Так что я хотел сделать это сам и начать с нуля.
Прямо сейчас у меня есть очень изящная, элегантная и без взлома реализация растущего UITextView, но одна часть отсутствует.
Элегантное вращение.
Когда я просто подгоняю фреймы к их соответствующим новым позициям в методе willRotateToInterfaceOrientation: duration: все работает идеально, НО у меня та же проблема, что и у HPGrowingTextView (см. Приложение Facebook). Небольшой промежуток между входным обзором и клавиатурой во время вращения.
Я обнаружил, что при повороте устройства в альбомную ориентацию портретная клавиатура, которая отображается в данный момент, не «морфируется», а скорее исчезает (отправляет уведомление «willHide»), и вновь появляется альбомная версия (отправляя уведомление «willShow») , Переход является очень тонким исчезновением и, возможно, некоторым изменением размера.
Я заново реализовал свой проект, используя inputAccessoryView, чтобы увидеть, что происходит потом, и я был приятно удивлен. InputAccessoryView вращается в идеальной синхронизации с клавиатурой. Там нет пробела / промежутка между ними.
К сожалению, мне еще не пришла в голову идея, как разместить док-станцию inputAccessoryView в нижней части экрана и NOT исчезнуть / выйти из нее вместе с клавиатурой ...
То, что я не хочу, - это хакерские решения, такие как ... "немного уменьшив фрейм в CoordinateSystem toInterfaceOrientation, а затем переместив его обратно вверх, когда вызывается didRotateFrom ...".
Я знаю еще одно приложение, которому удалось реализовать такое поведение, и это "Kik Messenger".
У кого-нибудь есть идея, совет или ссылка, которую я еще не видел по этой теме?
Спасибо большое!
Примечание: Как только эта проблема будет решена, я открою исходный код проекта для всех, чтобы получить прибыль, потому что почти каждая реализация, которую я смог найти за последние несколько дней, - беспорядок.