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

Jus*_*tin 5 iphone objective-c uitableview

可能重复:
您可以选择UITableViewCell上的高度更改动画吗?

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

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

谢谢你,贾斯汀

Dan*_*pos 6

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

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

您可以做的是在用户点击给定单元格时存储展开的单元格的索引路径.然后,heightForRowAtIndexPath可能如下所示:

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

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

else {
    return 44;
}

}
Run Code Online (Sandbox Code Playgroud)

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPathswithRowAnimation:(UITableViewRowAnimation)animation
Run Code Online (Sandbox Code Playgroud)

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

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

这是一个艰难但如果你让它工作我敢打赌它会很酷.祝好运.