此代码的问题(在 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 。我在这里缺少什么?
答案 0 :(得分:14)
在iOS
和OS X
中经常会出现这样或那样的隐式动画(例如,代码正由已触发动画的其他代码执行) )。
根据我的经验,使用UITableView
和UICollectionView
控制动画可能特别困难。您最好的选择可能是将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)