firstResponder
になったときと拒否したときに奇妙な振る舞いをする検索バーに問題があります。UISearchBarは自動的にフレームのサイズを変更してフレームを変更します
検索バーは、テーブルビュー
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.view.frame.size.width, 44.0f)];
self.searchBar.translucent = NO;
self.searchBar.barTintColor = [UIColor grayColor];
self.tableView.tableHeaderView = self.searchBar;
self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar
contentsController:self];
self.searchController.searchResultsDataSource = self;
のヘッダとして付加されているビューコントローラはJASidePanelController
の左パネルに設定され、キーボードが表示または非表示にするときには、中央パネルを非表示:
- (void)keyboardWillAppear:(NSNotification *)note
{
[self.sidePanelController setCenterPanelHidden:YES
animated:YES
duration:[[note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]];
self.searchBar.showsCancelButton = YES;
}
- (void)keyboardWillDisappear:(NSNotification *)note
{
[self.sidePanelController setCenterPanelHidden:NO
animated:YES
duration:[[note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]];
self.searchBar.showsCancelButton = NO;
}
ノーマル状態
検索バーがなりポイント最大約それのいずれかまたは下に移動しポイントをランダム
そして、検索バーは、その自然のフレームに戻し、その後、ウィンドウの原点に到達するまでアニメーション化し、辞職すると
ここにはバグを再現するsample projectがあります。
EDIT:
@kwylezsuggestion 1として、それは辞任時に検索バーが作る、不要なアニメーションをすることで回避することができます。
self.searchBar.clipsToBounds = YES;
それがするtableHeaderである必要はありません場合にtableViewのするtableHeaderは、アップ/ダウンの動きを固定してのViewControllerのビューのサブビューとしてあなたの検索バーを追加し、代わりに。 –
これは当てはまりますが、ユーザーがスクロールしたときに表示する必要のあるテーブルビューの背後にあるコンテンツがあります。何も見つからない場合でも解決策に戻る可能性があります。 – Moxy
私の答えを確認してください – codercat