Я предполагаю, что вы представляете клавиатуру, вызывая becomeFirstResponder
для некоторого компонента пользовательского интерфейса.
Если клавиатура появляется после представления вашего представления, вам следует проверить, где выполняется этот вызов. Вызов его в viewDidLoad
или аналогично рано должен привести к тому, что клавиатура будет отображаться при анимации представления.
Ваш макет также должен корректно обрабатывать изменения клавиатуры. Размер клавиатуры может измениться даже после ее представления. Например, клавиатура Emoji / Quick Type выше, чем клавиатура по умолчанию.
Вы должны выполнить изменения ограничений в комбинации UIKeyboard[Will/Did]ShowNotification
, UIKeyboard[Will/Did]HideNotification
и UIKeyboardWillChangeFrameNotification
. В вашем случае, UIKeyboardWillShowNotification
должен добиться цели.
Словарь userInfo
содержит много информации о клавиатуре. Вы найдете последний кадр клавиатуры в UIKeyboardFrameEndUserInfoKey
. Если вы анимируете изменения в вашем макете, вы можете использовать значения в UIKeyboardAnimationCurveUserInfoKey
и UIKeyboardAnimationDurationUserInfoKey
для анимации с той же анимацией, что и на клавиатуре.
- (void)viewDidLoad {
[super viewDidLoad];
// Don't forget to remove the observer when appropriate.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[self.textField becomeFirstResponder];
}
- (void)keyboardWillShow:(NSNotification *)notification {
CGFloat keyboardHeight = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;
[self.viewHeightConstraint setConstant:keyboardHeight];
// You can also animate the constraint change.
}
Такая настройка также будет работать, если клавиатура представлена с самого начала.