UITableView (グループ化) の上部に searchBar と activityIndicator を追加する正しい方法を見つけようとしています。検索が完了するまでに数秒かかる場合があります。検索が完了すると、activityIndicator が searchBar の上に一列に表示され、消えるようにしたいと考えています。現在、検索はバックグラウンドで実行されています。
私のアプローチは、IB で tableHeaderView として UIView を作成し、次に viewDidLoad で UISearchBar を作成し、それを subView として tableHeaderView に追加することでした。これはうまく機能し、おそらくIBでもこれを行うことができます。
次に、ユーザーが searchBar を選択すると、navigationBar が非表示になり、searchBar に [キャンセル] ボタンが表示されます。
ユーザーが検索ボタンをクリックすると、次のようになります。
- (void)showSearchActivityIndicator:(NSString*)title {
_activityView = [[ActivityViewController alloc] initWithNibName:@"ActivityViewController" bundle:nil];
[UIView beginAnimations:nil context: NULL];
[UIView setAnimationDuration:0.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
_activityView.view.frame = CGRectMake(0, 0, 320, 44);
_searchBar.frame = CGRectMake(0, 44, 320, 44);
self.tableView.tableHeaderView.frame = CGRectMake(0, 0, 320, 88);
[self.tableView.tableHeaderView addSubview: _activityView.view];
//[self.tableView setContentOffset:CGPointMake(0, -44)];
[_activityView show:title];
[UIView commitAnimations];
}
ActivityViewController ビューには、サブビューとして UIActivityView と UILabel を持つ UIView があることに注意してください。
ここでの問題は、ActivityViewController ビューが追加されたときに、テーブルビューのコンテンツ自体を下にスクロールする方法がわからないことです。tableViewHeader の高さが変更されたときに tableView が自動的に調整されることを期待していましたが、それは起こらないようです。
setContentOffset を使用すると、tableViewHeader の位置にも影響するようです。
ここで何が欠けているのですか、それとも私のアプローチ全体が間違っていますか?
編集:何が起こるかを示すスクリーンショットを追加