在选择时为UITableViewCell高度设置动画

时间:2009-12-14 01:17:47

标签: iphone objective-c uitableview

  

可能重复:
  Can you animate a height change on a UITableViewCell when selected?

我一直在做很多谷歌搜索,试图弄清楚这样做的正确方法,到目前为止,我不知所措。

我已经使用我自己的视图将UITableViewCell子类化了,并且我试图在选择UITableViewCell的高度时进行动画扩展,并在再次选择它时收缩。这个表有可能包含数千行,所以我不想覆盖tableView的heightForRowAtIndexPath。理想情况下,我希望能够一次扩展多个单元格,但这并不是那么重要。这样做的最佳方式是什么?

谢谢你, 贾斯汀

1 个答案:

答案 0 :(得分:6)

除了heightForRowAtIndexPath之外,没有其他指定单元格高度的机制。除非您正确地考虑该方法中的扩展单元格,否则您将发现其他单元格在其上运行或隐藏在其下方。从我忘记设置heightForRowAtIndexPath的骨头代码中,我很确定你的其他单元格会显示在它上面。

由于您正在谈论数千行,我们假设用户无法重新排列单元格。

当用户点击给定的单元格时,您可以执行的操作是存储展开的单元格的索引路径。然后,heightForRowAtIndexPath可能如下所示:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{

if ([indexPath isEqual:lastSelectedIndexPath])
{
    return 80;
}

else {
    return 44;
}

}

如果你真的想要多个选择,你可以将适当的索引路径存储到一个数组并检查它们:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{

CGFloat cellHeight = 44;

for (NSIndexPath *expandedIndexPath in expandedIndexPathsArray)
{
    if ([indexPath compare:expandedIndexPath] == NSOrderedSame)
    {
        cellHeight = 80;
        break;
    }
}

return cellHeight;

}

让动画看起来正确需要一些工作。我已经玩了这个特定的UI想法了一段时间,并且永远不会让自己坐下来真正实现它。您可以做的一件事是显示一个虚拟视图,在您更新其背后的tableview时动画。

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPathswithRowAnimation:(UITableViewRowAnimation)animation

可能对此感兴趣,因为您可以使用单元格动画来模拟下方单元格的移动以适应您的扩展。

如果您可以完全放弃单元格框架的动画,则可以在设置新高度后对扩展数据执行不透明度动画。

这是一个很难的但如果你让它发挥作用我敢打赌它会很酷。祝你好运。