我正在试验UITableView,但动画并没有像我期望的那样发生。
给定一个单元格列表,我想删除最顶部的单元格(IndexPathsForVisibleRows[0]
处的项目),并将其下面的所有行设置为向上动画到新位置。
但是,似乎任何时候IndexPathsForVisibleRows[0]
(或任何不可见的单元格超过第一个可见的单元格)都被触摸(移动,删除等),UITableView拒绝设置事务结果的动画。
我已经包含了2个GIF来证明这个问题。
第一个GIF演示了所需的行为。我正在IndexPathsForVisibleRows[1]
(第二个屏幕上的单元格)移除单元格。
注意下面的所有单元格如何正确定位到位置。
第二个GIF演示了删除最顶层单元格(IndexPathsForVisibleRows[0]
)时会发生什么。请注意下面的所有单元格如何在没有动画的情况下立即移动到新位置。
(注意:整个表更改包含在BeginUpdates / EndUpdates块中)。
我是否遗漏了导致2个场景表现不同的内容,或者我只是偶然发现了UITableView错误/限制?
答案 0 :(得分:0)
经过大量调查,包括几个新的代码项目,将UITableView提炼到可能导致这种行为的各种不同因素,我找到了简单的答案。
不要使用UITableView
我和许多其他人一样,在很多应用程序中都非常依赖UITableView,因为它的简单性和性能,但是,如果你真的希望它以流畅,明智的方式运行,它就无法实现。 它的行为中存在一些固有的错误,似乎并没有被苹果公司解决 - 而且毫无疑问,当SDK中已经存在更好的替代方案时。
输入UICollectionView。
我采用了我的所有后端逻辑,并将其改为提供UICollectionView(所有工作大约需要半小时),并且看,所有内容都按照原定的方式工作。
所以,我的所有代码都是正确的,UITableView只是挡路了。
现在的样子。请注意,所有删除方案都可以正确设置动画,没有笨拙。
我不是第一个发现缺少UITableView的人: https://pspdfkit.com/blog/2017/the-case-for-deprecating-uitableview/
UICollectionView的其他好处: