1

UITableView (グループ化) の上部に searchBar と activityIndi​​cator を追加する正しい方法を見つけようとしています。検索が完了するまでに数秒かかる場合があります。検索が完了すると、activityIndi​​cator が 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 の位置にも影響するようです。

ここで何が欠けているのですか、それとも私のアプローチ全体が間違っていますか?

編集:何が起こるかを示すスクリーンショットを追加 ここに画像の説明を入力

4

1 に答える 1