2011-12-22 3 views
0

У меня есть 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]; 
    }  
} 

ответ

0

Где вы были установлены keyboardIsShown? Разве вы не хотите делать это сразу после того, как вы проверите, уже ли он установлен?

А потом: это 4-е поле возле конца прокрутки и у вас есть набор прокрутки отскока?

+0

Я не использовал KeyboardIsSown, просто KeyboardDidShow. На самом деле KeyboardDidShow не проблема. Независимо от того, на каком поле щелкнули поначалу, когда появляется клавиатура, прокрутка просматривается плавно в нужное место. Это когда вы нажимаете на третье поле, где есть это заикание, переходя от 3-го по 4-е поле (которое является первым, скрытым клавиатурой), что происходит заикание. Под ним есть еще одно поле, поэтому я не думаю – mflac

+0

Я только что добавил scrollView.bounces = NO ;, но это не повлияло на эту проблему. – mflac

+0

Ваш код говорит 'if (keyboardIsShown) return;'. Где вы устанавливаете эту переменную? –

 Смежные вопросы

  • Нет связанных вопросов^_^