【问题标题】:iOS - Animate change in heightForFooterInSectioniOS - heightForFooterInSection 的动画变化
【发布时间】:2013-01-19 17:10:47
【问题描述】:
我有一个包含 3 个部分的应用程序,每个部分都有一个页脚。我已经通过 viewForFooterInSection 建立了这一点,并使用 heightForFooterInSection 为每个设置了高度。
这些页脚不是固定大小的,因为它们会根据某些因素改变高度。当高度发生变化时,这是一个非常不稳定的动画。而不是显示高度变化,它只是从旧高度跳到新高度。
if (condition == YES) {
return 45;
}
else {
return 70;
}
有没有办法为这种高度变化设置动画以提供更流畅的体验?谢谢!
【问题讨论】:
标签:
iphone
objective-c
xcode
uitableview
animation
【解决方案1】:
创建一个自定义页脚视图并保留它的本地变量...
- (UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return self.footerView;
}
那你应该可以打电话了
[self.footerView updateHeightForCondition:YES]; //or NO
根据需要。
这可能是...
[UIView animateWithDuration:0.5f animations:^{
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, condition ? 45 : 70);
}];
如果您覆盖 viewForFooter,则不再需要覆盖 heightForFooterInSection 或 titleForFooterInSection。
【解决方案2】:
这适用于单元格高度的动画更改,我看不出它为什么不适用于页眉和页脚高度。我目前无法自己测试它,如果它不起作用,请道歉 - 让我知道,我会删除它。
对模型或控制器属性进行任何更改(这样下次调用 heightForFooter.. 时,将返回新值)。然后,只需调用:
[self.tableView beginUpdates];
[self.tableView endUpdates];
调用这两个方法之间没有任何内容似乎很不寻常,但这会导致表重新查询其委托和数据源以获得新的大小,并动画到新的大小。通常您会添加或删除行,但也包括更改大小。