没有行动画动画的ReloadRowsAtIndexPaths

时间:2015-10-01 20:27:55

标签: uitableview swift2 xcode7

此代码的问题(在 func tableView(tableView:UITableView,commitEditingStyle editingStyle:UITableViewCellEditingStyle,forRowAtIndexPath indexPath:NSIndexPath)

tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)

if indexPath.row > 1{
    tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: indexPath.row-1, inSection: 0)], withRowAnimation: .None)
}
if tDate[activeRow].count == 0{
    tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: 0, inSection: 0)], withRowAnimation: .None)
}

reloadRowsAtIndexPaths 都是动画的,但指定了 withRowAnimation:.None 。我在这里缺少什么?

2 个答案:

答案 0 :(得分:14)

iOSOS X中经常会出现这样或那样的隐式动画(例如,代码正由已触发动画的其他代码执行) )。

根据我的经验,使用UITableViewUICollectionView控制动画可能特别困难。您最好的选择可能是将reloadRowsAtIndexPaths:withRowAnimation:的调用放入传递给UIView performWithoutAnimations:方法的闭包中:

UIView.performWithoutAnimation {
    if indexPath.row > 1{
        tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: indexPath.row-1, inSection: 0)], withRowAnimation: .None)
    }
    if tDate[activeRow].count == 0{
        tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: 0, inSection: 0)], withRowAnimation: .None)
    }
}

注意:在多次更新同时发生之前和之后调用tableView.beginUpdates()tableView.endUpdates()也不错。

答案 1 :(得分:6)

虽然查尔斯(Charles)描述了解决此问题的适当方法,但它没有回答UITableViewRowAnimation.none为什么提供动画的问题。

根据UITableViewRowAnimation.none的文档,“插入或删除的行使用默认动画。”因此,尽管.none听起来不应该有动画,但实际上却更像.automatic

enter image description here

我本来会留此作为评论,但评论不能包含图片。请注意,此答案并不意味着解决问题,因为Charles已经做到了。这是供下一个人想知道为什么UITableViewRowAnimation.none提供动画的参考。