2011-12-22 7 views
0

複数のtextFieldを持つscrollViewがあります。これはアクティブなフィールドを追跡し、キーボードがポップアップしたときに表示されるようにします。それはうまくいっていますが、3番目から4番目のtextFieldにタブを付けると、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

私はKeyboardIsShownを使用せず、KeyboardDidShowだけを使用しました。実際、KeyboardDidShowは問題ではありません。どのフィールドが最初にクリックされても、キーボードが表示されると、スクロールビューはスムーズに正しい場所にスクロールします。 3番目のフィールドをクリックすると、3番目のフィールドから4番目のフィールドに移動します(これは、キーボードによって隠された最初のものです。スタッターが発生します。 – mflac

+0

scrollview.bounces = NO;を追加しましたが、この問題には影響しませんでした – mflac

+0

あなたのコードは 'if(keyboardIsShown)return;'と言っています。 –

関連する問題