У меня есть scrollView с несколькими текстовыми полями, которые отслеживают активное поле и обеспечивают его видимость при всплывании клавиатуры. Все работает хорошо, но когда я накладываю вкладку с 3-го на 4-й текстовый экран, я получаю немного вверх и вниз «shimmy» до того, как textField окажется в нужном месте. Какие-либо предложения?iOS scrollView setContentOffset «shimmy»
-(void)keyboardDidShow:(NSNotification *)notification
{
if (keyboardIsShown)return;
NSDictionary* info=[notification userInfo];
// get keyboard size
CGSize keyboardSize=[[info objectForKey:UIKeyboardFrameBeginUserInfoKey]CGRectValue].size;
//Set scrollview insets to make room for keyboard
UIEdgeInsets contentInsets=UIEdgeInsetsMake(0.0, 0.0, keyboardSize.height, 0.0);
scrollView.contentInset=contentInsets;
scrollView.scrollIndicatorInsets=contentInsets;
//scroll the active text field into view
CGRect viewFrame=self.view.frame;
viewFrame.size.height-=keyboardSize.height;
int fieldHeight=self.currentTextField.bounds.size.height;
CGFloat navHeight=self.navigationController.navigationBar.frame.size.height;
CGPoint viewPoint=CGPointMake(0.0, self.currentTextField.frame.origin.y+fieldHeight);
if (!CGRectContainsPoint(viewFrame, viewPoint)) {
//scroll to make sure active field is showing
CGPoint scrollPoint=CGPointMake(0.0, viewPoint.y-keyboardSize.height+navHeight);//+navHeight
[scrollView setContentOffset:scrollPoint animated:YES];
}
}
-(void)showActiveField
{
//this makes sure that activeField shows when selecting another field after initial keyboard show
int fieldHeight=self.currentTextField.bounds.size.height;
CGPoint viewPoint=CGPointMake(0.0, self.currentTextField.frame.origin.y+fieldHeight);
CGRect viewFrame=self.view.frame;
int inset=scrollView.contentInset.bottom;
if (!CGRectContainsPoint(viewFrame, viewPoint)) {
//scroll to make sure active field is showing
CGPoint scrollPoint=CGPointMake(0.0, viewPoint.y-inset);
[scrollView setContentOffset:scrollPoint animated:YES];
}
}
Я не использовал KeyboardIsSown, просто KeyboardDidShow. На самом деле KeyboardDidShow не проблема. Независимо от того, на каком поле щелкнули поначалу, когда появляется клавиатура, прокрутка просматривается плавно в нужное место. Это когда вы нажимаете на третье поле, где есть это заикание, переходя от 3-го по 4-е поле (которое является первым, скрытым клавиатурой), что происходит заикание. Под ним есть еще одно поле, поэтому я не думаю – mflac
Я только что добавил scrollView.bounces = NO ;, но это не повлияло на эту проблему. – mflac
Ваш код говорит 'if (keyboardIsShown) return;'. Где вы устанавливаете эту переменную? –