ios 动画显示UITableView的页眉和页脚

ubbxdtey  于 2023-02-06  发布在  iOS
关注(0)|答案(7)|浏览(162)

我一直在努力用动画来移除一个tableview的页眉/页脚内容。我相信我可以对页眉内容本身调用removeFromSuperview,或者只是将页眉赋值为nil,但是我不知道如何动画化它。一个简单的动画块什么也做不了-我如何淡入/淡出一个视图(在这个例子中是一个标签)?

nwwlzxa7

nwwlzxa71#

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

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

这里假设动画是在UITableViewController类内部调用的。
简单地从超级视图中删除标题视图是不起作用的,因为表格视图不知道调整自己的大小来填充以前的标题视图。标题视图的设置会导致表格视图以动画方式刷新自己。
如果这不起作用,请检查tableView示例的赋值。

4sup72z8

4sup72z82#

最后我得到了下面的简单解决方案,它为删除标题设置了动画效果。

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

我知道这是在WINSergey的回应中提到的,但我发现他的解释有点混乱。

bqucvtff

bqucvtff3#

我发现以下两个选项都可以正常工作:
备选案文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];
guz6ccqo

guz6ccqo4#

我遇到了同样的问题,我想控制如何删除头,这里是我的方法:
在视图加载时:

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

g9icjywg5#

这是完美的工作“是”,我不关心动画

[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];

诺奥。

k97glaaz

k97glaaz6#

我不得不把2动画得到它的工作。

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

4szc88ey7#

如果有人这样做,我不得不混合所有的答案,它在一个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()
}

相关问题