У меня есть представление коллекции, в котором отображаются горизонтальные ячейки, которые заполняют экран (это приложение iOS). В некоторых ячейках есть текстовые поля. Если пользователь нажимает кнопку «Далее», просмотр коллекции переходит к следующему экрану. Клавиатура изменяет размер представления, содержащего представление коллекции. Все это в навигационном контроллере. Проблема в том, что когда клавиатура находится на экране, а пользователь нажимает следующую анимацию с контроллера навигации (push), а клавиатура отклоняется от перекрытия. Это отображает следующий вид в верхней части экрана (например, клавиатура все еще там).Неверная высота представления после ввода контроллера контроллера
Это код, который изменяет вид:
-(void)keyboardWillShow:(NSNotification*)notification {
NSDictionary *info = [notification userInfo];
NSValue *keyboardFrameValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
NSTimeInterval animationDuration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
UIViewAnimationCurve animationCurve = [info[UIKeyboardAnimationCurveUserInfoKey] integerValue];
CGRect keyboardFrame = [keyboardFrameValue CGRectValue];
BOOL isPortrait = UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation);
CGFloat keyboardHeight = isPortrait ? keyboardFrame.size.height : keyboardFrame.size.width;
self.bottomConstraint.constant = -keyboardHeight;
[self setNeedsUpdateConstraints];
[UIView animateWithDuration:animationDuration delay:0.0 options:(animationCurve << 16) animations:^{
NSLog(@"keyboard will show");
[self layoutIfNeeded];
} completion:NULL];
}
-(void)keyboardWillHide:(NSNotification*)notification {
NSDictionary *info = [notification userInfo];
NSTimeInterval animationDuration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
UIViewAnimationCurve animationCurve = [info[UIKeyboardAnimationCurveUserInfoKey] integerValue];
self.bottomConstraint.constant = 0;
[self setNeedsUpdateConstraints];
[UIView animateWithDuration:animationDuration delay:0.0 options:(animationCurve << 16) animations:^{
NSLog(@"keyb will hide");
[self layoutIfNeeded];
} completion:^(BOOL finished) {
if (finished) {
[self layoutIfNeeded];
}
}];
}
Любые идеи о том, как это исправить?
Это более обходной путь, чем решение, но может отключить «следующий» ключ, когда отображается клавиатура? –