UISearchBar を含むビューがあります。この UISearchBar はページの上部には表示されません。画面の上部から約 90 ポイント下のヘッダー画像の下にあります。
ビューのすべての要素は UIScrollView にラップされます。ユーザーが UISearchBar をタップすると、正しいことが起こります。ビュー全体が上にスクロールされるため、検索バーが画面の一番上に表示され、ビューのコンテンツの上に暗いオーバーレイが表示され、キーボードが上にスライドします。
これまでのところすべて順調です。検索をキャンセルして、すべてのコンテンツを以前の場所に戻したい場合に問題が発生します (UISearchBar が画面の上部に表示されなくなります)。
キーボードが表示されているときにユーザーがキャンセルを押した場合、これを行うことができます。UIKeyboardWillHideNotification をリッスンし、スクロール ビューのコンテンツ オフセットを (0, 0) に戻します。
ただし、ユーザーが一部の検索結果で指をドラッグすると、キーボードが消えて、検索結果をより大きく表示できます。ユーザーがキャンセルを押した場合、検索バーはページの上部に残り、すべてがひどいものに見えます。
UISearchDisplayDelegate に「setContentOffset」コードを入れてみました:
- (void)searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView
{
[_scrollView setContentOffset:CGPointMake(0,0) animated:YES];
}
これは機能しますが、検索結果がフェードアウトするまでスクロールが行われないため、見栄えがよくありません (したがって、2 つの別々のアニメーションが表示されます)。
次に、このメソッドを試しました(テーブルビューが非表示になる直前に呼び出されます):
- (void)searchDisplayController:(UISearchDisplayController *)controller willHideSearchResultsTableView:(UITableView *)tableView
{
[_scrollView setContentOffset:CGPointMake(0,0) animated:YES];
}
ただし、それは効果がありません。コンテンツ オフセットは変更されません。
任意のヒント?