У меня есть scrollview с несколькими текстовыми полями, в том числе в одной позиции Y. Я использую следующий код, чтобы скорректировать смещения scrollview/вставки, чтобы активное текстовое поле всегда было видимым, но если пользователь уже редактирует поле и затем нажимает на другое текстовое поле в той же «строке» (то же Y-позицию), scrollview отскакивает/исправляет. Есть ли способ обойти это?Как предотвратить зависание scrollview при настройке содержимого для клавиатурыWillBeShown/keyboardWillBeHidden
- (void)keyboardWillBeShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
self.scrollView.contentInset = contentInsets;
self.scrollView.scrollIndicatorInsets = contentInsets;
UIView *activeField = [self.view findFirstResponder];
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
aRect.size.height -= aRect.origin.y;
aRect.origin.y = 0;
CGPoint activeFieldOrigin = [activeField convertPoint:CGPointZero toView:self.view.window];
if (!CGRectContainsPoint(aRect, activeFieldOrigin)) {
CGPoint scrollPoint = CGPointMake(0.0, activeFieldOrigin.y-kbSize.height);
[self.scrollView setContentOffset:scrollPoint animated:YES];
}
}
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
self.scrollView.contentInset = contentInsets;
self.scrollView.scrollIndicatorInsets = contentInsets;
}
Я могу предотвратить поведение, выполнив setContentOffset: анимированный с анимированным = НЕТ. Поэтому я предполагаю, что при анимированном = YES он отбрасывает фактическую работу на блок или задерживает выполнение фактического набора, а затем, когда он/делает/фактически идет, чтобы сделать это, повторное шоу немедленно возвращает его обратно к тому же должность.
Мысли?