iOS - heightForFooterInSection中的动画更改

时间:2013-01-19 17:10:48

标签: iphone objective-c xcode uitableview animation

我有一个包含3个部分的应用程序,每个部分都有一个页脚。我已经通过viewForFooterInSection建立了这个,并使用heightForFooterInSection为每个设置了高度。

这些页脚不是固定大小,因为它们会根据某些内容改变高度。当高度改变时,它是一个相当不稳定的动画。它不是显示高度变化,而是从旧高度跳到新高度。

if (condition == YES) {
    return 45;
}

else {
    return 70;
}

有没有办法动画这个高度变化以提供更流畅的体验?谢谢!

2 个答案:

答案 0 :(得分:0)

创建自定义页脚视图并保留其局部变量...

- (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。

答案 1 :(得分:0)

这适用于动画更改单元格高度,我看不出它为什么它也不适用于页眉和页脚高度。我现在无法自己测试这个,如果它不起作用,请道歉 - 让我知道,我会删除它。

对模型或控制器属性进行任何更改(以便下次调用heightForFooter ..时,将返回新值)。然后,只需致电:

[self.tableView beginUpdates];
[self.tableView endUpdates];

调用这两个方法之间没有任何内容似乎很不寻常,但这会导致表重新查询其委托和数据源以获取新大小,并为该新大小设置动画。通常您已添加或删除了行,但也涵盖了更改大小。