5

UITableViewController のサブクラスがあります。tableView の tableHeaderView に UISearchBar を追加/削除できるコードがあります。これらのタスクを実行するために必要なコードは次のとおりです。

self.tableView.tableHeaderView = uiSearchBar; //Make the search bar appear
self.tableView.tableHeaderView = nil; //Make the search bar disappear

問題は、UISearchBar の追加/削除をアニメーション化することです。追加すると上からスライドして表示され、削除すると表示されたり消えたりするのではなく、上にスライドして表示されなくなります。助言がありますか?

ありがとう。

4

3 に答える 3

7

私はついにこれを理解することができました。かなりシンプルになりました。UISearchBar をテーブル ヘッダーに追加する代わりに、アニメーション UITableViewRowAnimationTop を使用してテーブルの最初のセルに挿入し、同じ方法を使用して削除します。これにより、バーが上部からスライドインおよびスライドアウトします。バーを表示するコードは次のとおりです。

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.baseUiTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];
[self.baseUiTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];

検索バーを削除するコードは次のとおりです。

[uiSearchBar resignFirstResponder];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.baseUiTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];
于 2009-08-28T04:24:45.180 に答える
4

UITableViewStyleGrouped にも適している (行数を変更する必要がない) はるかに簡単な方法はcontentInset、テーブルのをアニメーション化することです。

CGFloat h = uiSearchBar.bounds.size.height;
UITableView *tv = self.tableView;
if (tv.tableHeaderView)
{  // hide bar
   [UIView animateWithDuration:0.3 animations:^{
      tv.contentInset = UIEdgeInsetsMake(-h, 0, 0, 0);
   } completion:^(BOOL finished) {
      tv.contentInset = UIEdgeInsetsZero;
      tv.tableHeaderView = nil;
      [tv scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
   }];
}
else
{  // show bar
   uiSearchBar.frame = CGRectMake(0, -h, tv.frame.size.width, h);
   [UIView animateWithDuration:0.3 animations:^{
      [tv scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
      tv.tableHeaderView = uiSearchBar;
   }];
}

OPが質問してから3年経っていることはわかっていますが、これは望ましい効果を達成するための優れた代替手段であるため、同じ問題に直面している他の人にとって役立つかもしれないと思いました.

于 2012-05-02T03:47:39.857 に答える
0

検索バーの下の行だけが表示されるようにテーブル ビューをスクロール (アニメーション) させてから、検索バーを削除し、アニメーションなしで同じ行までスクロールしてみてください。

于 2009-08-25T17:20:16.993 に答える