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