У меня есть табличное представление с текстовым представлением для ввода текста непосредственно под ним, как в Apple Messages.Когда пользователь начинает вводить текст и появляется клавиатура, я хочу следующее поведение, подобное сообщениям IOS.
Если клавиатура ничего не закрывает, видимая часть табличного представления остается неизменной.
Если клавиатура что-то накрывает, табличное представление сдвигается вверх настолько, что ее самая нижняя заполненная ячейка находится чуть выше клавиатуры.
Поскольку я использую autolayout, в настоящее время у меня есть ограничение между табличным представлением и текстовым представлением под ним.Кроме того, в проекте есть IQKeyboard, который управляет многими другими представлениями, включая текстовые поля и текстовые представления.
Ограничение, объединенное с IQKeyboard, выполняет 2. Когда появляется клавиатура, клавиатура толкает текстовое представление вверх.Текстовое представление поднимает табличное представление вверх.Таким образом, если табличное представление заполнено полностью, вы видите последнюю ячейку табличного представления над текстовым представлением над клавиатурой, как вам необходимо.
Однако 2. не работает.
, если табличное представление незаполнено, клавиатура выдвигает текстовое представление, которое увеличивает табличное представление, так что вы больше не видите верхнюю часть табличного представления.
Я попытался настроить свойство contentOffset табличного представления, когда клавиатура отображается, и этот вид работает, нотаблица сначала движется вверх, а затем возвращается вниз.Я думаю, это потому, что уведомление об изменении свойства смещения не срабатывает до тех пор, пока клавиатура не начнет двигаться вверх.
Я также попытался настроить высоту табличного представления в соответствии с его содержимым, но это приводит к расширению текстового представления до заполненияразница из-за ограничений.
Content offset approach - problem is that content offset adjusts too late
//register for keyboard notifications and in handler:
if let infoKey = notification.userInfo?[UIKeyboardFrameEndUserInfoKey],
let rawFrame = (infoKey as AnyObject).cgRectValue {
let keyboardFrame = view.convert(rawFrame, from: nil)
self.heightKeyboard = keyboardFrame.size.height
UIView.animate(withDuration: 0.2, animations: {
self.tableView.contentInset = UIEdgeInsetsMake(self.heightKeyboard!, 0, 0, 0);
})
}
Может кто-нибудь предложить способ имитации поведения Apple Messages?Заранее спасибо за любые предложения.