3

「 UITableViewのtableHeaderViewのサイズを変更する方法」の回答については、githubに小さなプロジェクトを作成しました。このプロジェクトは、にヘッダービューを追加しUITableView、新しく追加されたヘッダービューとその下のセルの両方をアニメーション化します。

UITableViewただし、ヘッダーセルを追加するとすぐに、ヘッダーが:のセルと一緒にアニメーション化されないため、厄介なUIグリッチが発生します。

ヘッダーを追加すると、次の手順が実行されます。

  1. 問題:一番上のヘッダーが元の位置にジャンプします
  2. tableHeaderViewとsはUITableViewCell、最終的な位置まで一緒にアニメートします。

だから私の質問は、ヘッダーもアニメーション化することをどのように確認できるかということです。

Section-1セルとヘッダービューがまだアニメーション化されている間に、が最終位置にある効果をここで確認できます。

ヘッダーグリッチ

これは私がアニメーションを行う方法です:

- (void) showHeader:(BOOL)show animated:(BOOL)animated{

    CGRect closedFrame = CGRectMake(0, 0, self.view.frame.size.width, 0);
    CGRect newFrame = show?self.initialFrame:closedFrame;

    if(animated){
        // The UIView animation block handles the animation of our header view
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.3];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

        // beginUpdates and endUpdates trigger the animation of our cells
        [self.tableView beginUpdates];
    }

    self.headerView.frame = newFrame;
    [self.tableView setTableHeaderView:self.headerView];

    if(animated){
        [self.tableView endUpdates];
        [UIView commitAnimations];
    }
}
4

1 に答える 1

6

これで修正されますが、このクラスの別の部分でbeginUpdatesとが必要かどうかはわかりません。この例では実際には変更しないendUpdatesためです。dataSource

- (void)showHeader:(BOOL)show animated:(BOOL)animated {

    CGRect closedFrame = CGRectMake(0, 0, self.view.frame.size.width, 0);
    CGRect newFrame = show?self.initialFrame:closedFrame;

    if(animated){
        // The UIView animation block handles the animation of our header view
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.3];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

        // beginUpdates and endUpdates trigger the animation of our cells
        //[self.tableView beginUpdates];
    }

    self.headerView.frame = newFrame;
    [self.tableView setTableHeaderView:self.headerView];

    if(animated){
        //[self.tableView endUpdates];
        [UIView commitAnimations];
    }
}
于 2013-04-11T22:50:56.593 に答える