2016-12-29 55 views
-2

textViewがキーボードを表示または非表示にしたときに、ぼかしコードを使用して画面を上下に移動して、フォーカスしたときに最後のフィールドを確認できます。キーボードが表示されているときにナビゲーションバーが表示されない

- (void)textViewDidBeginEditing:(UITextView *)textField 
{ 
    [self animateTextView: textField up: YES]; 
} 


- (void)textViewDidEndEditing:(UITextView *)textField 
{ 
    [self animateTextView: textField up: NO]; 
} 

- (void) animateTextView: (UITextView*) textField up: (BOOL) up 
{ 
    const int movementDistance = 130; // tweak as needed 
    const float movementDuration = 0.2f; // tweak as needed 

    int movement = (up ? -movementDistance : movementDistance); 

    [UIView beginAnimations: @"anim" context: nil]; 
    [UIView setAnimationBeginsFromCurrentState: YES]; 
    [UIView setAnimationDuration: movementDuration]; 
    self.view.frame = CGRectOffset(self.view.frame, 0, movement); 
    [UIView commitAnimations]; 
} 

は、しかし、問題は、それはまた、画面には、上に移動したときに移動していますnavBarが、それは位置が[self animateTextView: textField up: YES];を使用した後だでnavBarnavBar以外のすべての移動または維持する方法があるということでしょうか?

+0

なぜですか?なぜあなたはこのようにあなたのビューをデザインしますか? 'UINavigationController'を使わないのはなぜですか?なぜあなたは 'beginAnimations:' APIを使用していますか?これは、iOS/iphoneos 3とは何ですか? –

答えて

1

これは、メインのViewにカスタムNavigationBarがあるためです。 ストーリーボードのNavBarの下に別のUIViewを作成し、textFieldやその他のUIオブジェクトをこの新しいビューに配置します。 このままにしておくと、navBarは、キーボードが表示されているときに上に押している同じUIViewオブジェクトの横にあるべきではありません。 したがって、この新しいアウトレットを作成してUIViewオブジェクトを作成し、代わりにviewController justのメインビューをこのような新しく作成されたビューに移動させます。

[UIView animateWithDuration:0.2 animations:^{ 
    //Just Replace Your Animation Code with This and see the difference. 
    self.containerViewOfOtherObjects.frame = CGRectOffset(self.containerViewOfOtherObjects.frame, 0, movement); 
}]; 
+0

Syedさん、ありがとうございました。私は、「self.view.frame = CGRectOffset(self.view.frame、0、movement);」という行を置き換える必要がありますか?また、[UIView beginAnimations:@ "anim" context:nil]; "... – CGR

+0

いいえ、この行だけを削除してください。 'self.view.frame = CGRectOffset(self.view.frame、0、movement);' –

+0

私は試しましたが、それは上に移動して、本当にすぐに元の場所に新しい追加ビューを移動するのと同じです – CGR

関連する問題