动画 UITableView 的页眉和页脚

Posted

技术标签:

【中文标题】动画 UITableView 的页眉和页脚【英文标题】:Animating a UITableView's header and footer 【发布时间】:2012-04-23 22:43:38 【问题描述】:

我正在努力用动画制作删除 tableview 的页眉/页脚内容的动画。我相信我可以在标题内容本身上调用 removeFromSuperview,或者只是将标题分配给 nil,但我不知道如何为它设置动画。一个简单的动画块不会做任何事情 - 我如何淡入/淡出视图(在这种情况下为标签)?

【问题讨论】:

您使用的是 UITableViewController、UITableViewDelegate 或 UITableViewDataSource 实例还是其他视图控制器类?如果您使用的是 UITableViewDataSource,则应使用 tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 以实用的方式删除页眉和 tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section 以编程方式删除页脚。 我正在使用 tableview 控制器。澄清一下,我想淡出表格的标题视图,而不是部分标题 【参考方案1】:

我写了一个示例,说明如何使用动画块完全删除标题视图。

[UIView beginAnimations:nil context:NULL];
[self.tableView setTableHeaderView:nil];
[UIView commitAnimations];

这当然假设这个动画是在你的 UITableViewController 类中被调用的。

简单地从超级视图中删除标题视图是行不通的,因为表格视图不知道自己调整大小以填充以前的标题视图。 header view 的设置会导致 table view 自动刷新。

如果这不起作用,请检查您对 tableView 实例的分配。

【讨论】:

【参考方案2】:

我最终得到了以下简单的解决方案。它以动画方式删除标题。

[self.tableView beginUpdates];
self.tableView.tableHeaderView = nil;
[self.tableView endUpdates];

我知道 WINSergey 的回复中提到了这一点,但我发现他的解释有点混乱。

【讨论】:

【参考方案3】:

我发现以下两个选项都可以正常工作:

选项 1

[UIView animateWithDuration:0.15
                      delay:0.0
        options: UIViewAnimationCurveEaseOut
                 animations:^deleteLabel.alpha = 0;
             completion:nil];

选项 2

[UIView beginAnimations:nil context:nil];
deleteLabel.alpha = 0.0;
[UIView commitAnimations];

【讨论】:

对于任何关注这个的人来说只是一个小提示,上面的选项应该是 UIViewAnimationOptionCurveEaseOut【参考方案4】:

我有同样的问题,我想控制如何删除标题,这是我的方法:

在 ViewDidLoad :

UIView *transView = [[UIView alloc] initWithFrame:CGRectMake(0.f, 0.f, 320.f, 200.f)];
transView.backgroundColor = [UIColor clearColor];
self.headerView = transView;
[transView release];

[self.tableView setTableHeaderView:self.headerView];

然后当你需要删除标题时:

[UIView animateWithDuration:.3f
                      delay:.0f
                    options: UIViewAnimationOptionBeginFromCurrentState
                 animations:^
                     self.headerView.frame = CGRectMake(0.0f, 0.0f, 320.f, 0.0f);
                 
                 completion:^(BOOL finished) 
                       [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:section] atScrollPosition:UITableViewScrollPositionTop animated:YES];
                 ];

【讨论】:

【参考方案5】:

这是“原样”完美的作品,我不关心动画

    [myPrettyViewControllerInstance letUpdatePrettyViewNow];
    [[self tableView] beginUpdates];
    [[self tableView] setTableHeaderView:[myPrettyViewControllerInstance view]];
    [[self tableView] endUpdates];

但如果我们不再需要它

    [[self tableView] setTableHeaderView:nil];

这就是我们所需要的全部,真的(如果它不是淡出 - 检查

    [[self tableView] setTableHeaderView:nil];

我们不需要

    [UIView beginAnimations:nil context:NULL];
    [[self tableView] setTableHeaderView:nil];
    [UIView commitAnimations];

没有

    [[self tableView] beginUpdates];
    [[self tableView] setTableHeaderView:nil];
    [[self tableView] endUpdates];

没有

    [[self tableView] setTableHeaderView:nil];
    [[self tableView] reloadData];

没有..

【讨论】:

抱歉,它适用于标题(不了解单元格)。我在我最近的项目中使用了它,并且一切正常。能否提供源代码? 它不适用于插入表头视图。使用故事板和自动布局。视图刚刚出现。它没有动画。 工作代码'- (void)updateAITrackerStatus' ' AITracker *tracker = [[[DataSingleton sharedSingleton] theAgenda] aiTracker];' if (tracker) [_aiTrackerVC setTracker:tracker]; [_tableView 开始更新]; [[self tableView] setTableHeaderView:[_aiTrackerVC view]]; [_tableView endUpdates]; else [[self tableView] setTableHeaderView:nil]; '【参考方案6】:

我必须放 2 个动画才能让它工作。

 [UIView animateWithDuration:2.0f animations:^
        mylbl.alpha = 0.1 ;
     completion:^(BOOL finished) 
        [UIView animateWithDuration:2.0f animations:^
            mylbl.alpha = 1.0 ;
        ];
    ];

【讨论】:

【参考方案7】:

如果有人这样做,我必须混合所有答案才能使其在UITableView 中正常工作。简单地做beginUpdatesendUpdates 并没有为我添加动画。这样就可以移除页脚,并且单元格可以通过动画很好地下降,而不是立即通过一个混蛋。

private func updateFooter(view : UIView?, size : CGFloat)

    UIView.beginAnimations(nil, context: nil)
    mainTableView.beginUpdates()
    mainTableView.tableFooterView = view
    mainTableView.tableFooterView?.frame.size.height = size
    mainTableView.endUpdates()
    UIView.commitAnimations()

【讨论】:

以上是关于动画 UITableView 的页眉和页脚的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 页眉和页脚高度与 Storyboard 布局不对应

页眉和页脚幻灯片动画的区别

UICollectionView 页眉和页脚视图

UICollectionView 页眉和页脚视图

如何在Excel中设置页眉和页脚

打印网页上的页眉和页脚如何设置