对于“How to resize a tableHeaderView of a UITableView?”的答案,我在github上创建了一个小项目,该项目为UITableView
添加了标题视图,并为新添加的标题视图和下方的单元格设置了动画它
然而,只要我添加标题单元格,我就会遇到令人讨厌的UI故障,因为标题不会与UITableView
的单元格一起动画:
当我添加标题时,会发生以下步骤:
tableHeaderView
和UITableViewCell
一起动画到最终位置。所以我的问题是,我如何确保标题也有效。
你可以在这里看到效果,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];
}
}
答案 0 :(得分:5)
这会修复它,但我不确定您是否需要此课程另一部分中的beginUpdates
和endUpdates
。因为在这个例子中你的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];
}
}