3

对于“如何调整 UITableView 的 tableHeaderView? ”的答案,我在github上创建了一个小项目,它向 a 添加了一个标题视图,UITableView并为新添加的标题视图和它下面的单元格设置了动画。

但是,一旦我添加标题单元格,我就会遇到令人讨厌的 UI 故障,因为标题不会与以下单元格一起动画UITableView

当我添加标题时,会发生以下步骤:

  1. 问题:最上面的标题跳转到原始位置
  2. ThetableHeaderViewUITableViewCells 一起动画到它们的最终位置。

所以我的问题是,我如何确保标题也有动画。

您可以在此处看到效果,其中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

这将解决它,但我不确定您是否需要beginUpdatesandendUpdates在本课程的另一部分。因为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 回答