动画 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
中正常工作。简单地做beginUpdates
和endUpdates
并没有为我添加动画。这样就可以移除页脚,并且单元格可以通过动画很好地下降,而不是立即通过一个混蛋。
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 的页眉和页脚的主要内容,如果未能解决你的问题,请参考以下文章