swift2 不带行动画的ReloadRowsAtIndexPaths动画

pxyaymoc  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(222)

这个代码的问题(在func tableView(tableView:UI表格查看,提交编辑样式编辑样式:UITableViewCellEditingStyle,对于索引路径中的行索引路径: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:.未指定任何。我在这里遗漏了什么?

lf5gs5x2

lf5gs5x21#

iOSOS X中,由于某种原因(例如,该代码正由已触发动画的其他代码执行),通常会以隐式动画结束。
根据我的经验,用UITableViewUICollectionView控制动画可能特别困难。最好的办法可能是将对reloadRowsAtIndexPaths:withRowAnimation:的调用放入传递给UIViewperformWithoutAnimations:方法的闭包中:

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()也是一个不错的主意。

weylhg0b

weylhg0b2#

虽然Charles描述了此问题的适当解决方案,但它没有回答为什么UITableViewRowAnimation.none提供动画的问题。
根据UITableViewRowAnimation.none的文档,“插入或删除的行使用默认动画。”因此,虽然.none听起来不应该有动画,但实际上它的行为更像.automatic

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

相关问题