Animate `UITableView` headers when animating `tableHeaderView` in

core-animation, ios, iphone, uitableview

Solution

this will fix it, but I'm not sure if you need the `beginUpdates` and `endUpdates` in another part of this class. Because your `dataSource` don't really change in this example.

- (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];
    }
}

Problem

For an answer for "How to resize a tableHeaderView of a UITableView?" I created a small project on github, which adds a header view to a `UITableView` and animates both the newly added header view and the cells underneath it. However, as soon as I add header cells I get a nasty UI glitch because the headers don't animate along with the cells of the `UITableView`: When I add the header the following steps happen: - Problem: The topmost header jumps to the original position - The `tableHeaderView` and the `UITableViewCell`s animate together to their final position. So my question is, how I can make sure that the headers also animate. You can see the effect here, where the `Section-1` is at the final position, while the cells and the header view are still animating: This is the method, where I do the animation: ``` - (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]; } } ```

Original source

Related problems