Секрет в том, что вам нужно вручную реализовать это поведение, и это боль.
Есть несколько шагов, которые вы должны сделать:
Шаг 1:Регистрация для уведомлений клавиатуры
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardWillHideNotification object:nil];
}
Шаг 2: измените размер содержимого, когда появляется клавиатура
- (void)keyboardWasShown:(NSNotification *)notification {
NSDictionary* info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0f, 0.0f, kbSize.height, 0.0f);
self.tableview.contentInset = contentInsets;
self.tableview.scrollIndicatorInsets = contentInsets;
[self.scrollView scrollRectToVisible:self.selectedView.frame animated:YES];
}
Предполагается, что вы получилиСвойство в вашем классе называется selectedView.Есть и другие способы сделать это, но главное - как-то вам нужно знать, какой прямоугольник просмотра должен видеть пользователь.
Шаг 3: Сбросить табличное представление при исчезновении клавиатуры
- (void)keyboardWillBeHidden:(NSNotification *)notification {
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
self.tableview.contentInset = contentInsets;
self.tableview.scrollIndicatorInsets = contentInsets;
}
Шаг 4. Отмена регистрации для уведомлений
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];
}