ビューの下部に検索バーがあります。問題は、キーボードで何かを入力するたびに、検索バーが下部に残り、入力している内容を表示できないことです。キーボードがポップアップするたびに動的に上に移動し、キーボードが消えた後に元の位置に戻したいと思います。残念ながら、検索バーは私のアプリの下部にある必要があり、これに固執しています。
キーボードが表示されたときにのみ検索バーを上に移動する方法はありますか?コードスニペットはどれも本当に役に立ちます。
ビューの下部に検索バーがあります。問題は、キーボードで何かを入力するたびに、検索バーが下部に残り、入力している内容を表示できないことです。キーボードがポップアップするたびに動的に上に移動し、キーボードが消えた後に元の位置に戻したいと思います。残念ながら、検索バーは私のアプリの下部にある必要があり、これに固執しています。
キーボードが表示されたときにのみ検索バーを上に移動する方法はありますか?コードスニペットはどれも本当に役に立ちます。
最善の策は、UISearchBarDelegateプロトコルで–searchBarShouldBeginEditing:を使用することです。
これは次のようになります:
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
CGRect newFrame = //some rect
mySearchBar.frame = newFrame;
return YES;//this is important!
}
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
CGRect originalFrame = //the original frame
mySearchBar.frame = originalFrame;
return YES;
}
編集:他の回答の1つは、UIKeyboard通知の使用を提案していますが、混乱を招く可能性があります。ただし、UISearchBarが最初のレスポンダーであるときだけでなく、キーボードが表示されるたびに機能するという利点があります。
編集2:Mayur Joshiは、アニメーションの使用を提案しています。これは、次のように実行できます。
[UIView animateWithDuration:duration
animations:^{
//what you want to animate (in this case, the search bar's frame)
}
completion:^(BOOL finished){
//what to do when the animation finishes
}];
編集3:検索バーの背後のビューを隠したくない場合は、検索バーが上に移動するたびにその高さを縮小する必要があります。コードと同じ場所に配置して、検索バーをアニメーション化できます。
こんにちは、このsBarはUISearchBarオブジェクトです。
- (void)keyboardWillShow:(NSNotification *)aNotification
{
// the keyboard is showing so resize the table's height
CGRect keyboardRect = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
NSTimeInterval animationDuration =
[[[aNotification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
CGRect frame = sBar.frame;
NSLog(@"%f",frame.size.height);
NSLog(@"%f",frame.origin.y);
frame.origin.y=frame.origin.y- keyboardRect.size.height;
[UIView beginAnimations:@"ResizeForKeyboard" context:nil];
[UIView setAnimationDuration:animationDuration];
sBar.frame = frame;
NSLog(@"%f",frame.size.height);
NSLog(@"%f",frame.origin.y);
[UIView commitAnimations];
}
- (void)keyboardWillHide:(NSNotification *)aNotification
{
// the keyboard is hiding reset the table's height
CGRect keyboardRect = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
NSTimeInterval animationDuration =
[[[aNotification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
CGRect frame = sBar.frame;
NSLog(@"%f",frame.size.height);
NSLog(@"%f",frame.origin.y);
frame.origin.y=frame.origin.y+ keyboardRect.size.height;
[UIView beginAnimations:@"ResizeForKeyboard" context:nil];
[UIView setAnimationDuration:animationDuration];
sBar.frame = frame;
NSLog(@"%f",frame.size.height);
NSLog(@"%f",frame.origin.y);
[UIView commitAnimations];
}
UIScrollViewを使用して、この検索バーをそのスクロールビューに保持する必要があります。ここで、検索バーの編集を開始すると、つまり、
- (void) searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar
SearchBarが次のように表示されるように、UIScrollViewのscrollRectToVisibleメソッドを設定します。
[yourScrollView scrollRectToVisible:CGRectMake(0, 300, yourScrollView.frame.size.width, yourScrollView.frame.size.height) animated:YES];
そして、あなたが検索バーにテキストを書いたとき、すなわち
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar1
スクロールビューscrollRectToVisibleを元のサイズに設定します。
[yourScrollView scrollRectToVisible:CGRectMake(0, 0, yourScrollView.frame.size.width, yourScrollView.frame.size.height) animated:YES];