標準的な方法でUISearchDisplayControllerを設定したUITableViewControllerを持っています(検索バーはtableView内にあります)。私は検索バーを隠すようにしたいと思っています。本当に隠されていて、ただスクロールしていないだけです。as in this solution。次に、ユーザーがボタンを押したときに検索UIを表示し、ユーザーが検索で見つかった項目の1つを選択した後に、再度非表示にします(本当に非表示にします)。ここでUITableViewの検索バーを非表示にする
は、そのためのほとんどの作業コードです:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.searchDisplayController.searchBar.prompt = @"Add an item";
self.searchDisplayController.searchBar.placeholder = @"Type the item name";
// i do this to trigger the formatting logic below
[self.searchDisplayController setActive:YES animated:NO];
[self.searchDisplayController setActive:NO animated:NO];
// rest of my view will appear
}
- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller {
NSTimeInterval duration = (self.isViewLoaded && self.view.window)? 0.3 : 0.0;
__block CGFloat searchBarHeight = controller.searchBar.frame.size.height;
[UIView animateWithDuration:duration animations:^{
self.tableView.contentOffset = CGPointMake(0, searchBarHeight);
self.tableView.contentInset = UIEdgeInsetsMake(-searchBarHeight, 0, 0, 0); // trouble here, I think
} completion:^(BOOL finished) {
controller.searchBar.hidden = YES;
}];
}
- (IBAction)pressedAddButton:(id)sender {
self.searchDisplayController.searchBar.hidden = NO;
[self.searchDisplayController setActive:YES animated:YES];
}
を示すために、私は適切にコンテンツのインセットを設定していると思うが、それが突然動作します。コードで示すように、テーブルはコンテンツがあまりにも遠くに移動することを許します。つまり、非常に背の高い2つの行だけで、私は下にスクロールすることができます。 contentInset行をコメントアウトすると、テーブルはコンテンツをあまりにも遠くに引っ張り、行0の上に大きな空白を残します。おそらく、検索バーが隠れている場所です。
誰でも助けることができます。
検索バーを隠した後、テーブルは2行、各70ピクセルの高さ、テーブルの高さ= 367、内容offset.y = 0、内容inset.top = -75、およびinset.bottom = 0期待される。私がここにこだわっているのは、「ボトムバウンス」の原因です。スクロールビューでは、コンテンツのサイズが140px、ビューが367で、スクロールできないようにしてください。なぜ、最初の行をスクロールできますか? – danh