SwipeTableView icon indicating copy to clipboard operation
SwipeTableView copied to clipboard

经常出现header和item不联动情况

Open CoderJackie opened this issue 8 years ago • 16 comments

不知道什么原因,在你的sample里也有这个问题

CoderJackie avatar Aug 27 '16 05:08 CoderJackie

你能具体说说什么操作下会出现这样的问题吗?而且你能否具体的描述下你说的不联动的情形吗?

liangdrime avatar Aug 27 '16 05:08 liangdrime

我录屏了,左右滑动的时候也遇到过。 1.zip

CoderJackie avatar Aug 27 '16 05:08 CoderJackie

好的,我看下问题。会及时解决的

liangdrime avatar Aug 27 '16 06:08 liangdrime

我刚才运行了一下我的demo,是直接进入混合模式,点击segment切换,然后下拉,并没有复现你这个问题。问一下,你这个是最新的版本吗?

liangdrime avatar Aug 27 '16 06:08 liangdrime

是啊,我是昨天下的master。

CoderJackie avatar Aug 27 '16 06:08 CoderJackie

我刚clone了mater的代码,run起来还是会这样。

CoderJackie avatar Aug 27 '16 06:08 CoderJackie

SingleOneKindView,HybridItemViews,HiddenNavigationBar都会有这个问题。

CoderJackie avatar Aug 27 '16 06:08 CoderJackie

那有点奇怪。这个问题应该是在切换item后,当前的item没有添加上observer。之前#issue15在隐藏bar后reloaddata会出现这个问题。不过那个解决了。 问一下,你也是直接运行后进入后直接点击切换之后下拉吧?

liangdrime avatar Aug 27 '16 06:08 liangdrime

是啊,我git clone下来代码,什么都没改,run起来点进去就给你录屏了,没任何其他操作

CoderJackie avatar Aug 27 '16 06:08 CoderJackie

我去,那就很奇怪了。我刚才也在git下了代码运行,也没有问题。你看一下在你切换之后,下拉的时候kvo的回调是不是不走啊?

liangdrime avatar Aug 27 '16 06:08 liangdrime

我在打断点调试。getDataAtIndex:方法给return掉了,导致没调用refreshWithData:atIndex:,cellforitem时候没addobserver

CoderJackie avatar Aug 27 '16 06:08 CoderJackie

这是不是swipetable里面多调用了removeobserver,导致过多移除了啊

CoderJackie avatar Aug 27 '16 06:08 CoderJackie

不是。demo中我默认设置的是一次请求所有数据,所以根据index滚动生成数据就不走了。 observer的移除与添加时成对出现在collectionview的cellforitem中的。第一次移除的时候_shouldVisibleItemView与_currentItemView都是nil,所以第一次相当于只是添加了。

这样,你在.h中写一个可变数组,然后在所有添加移除observer的地方。对应的把这个item添加进或者移除出数组。最后在tableview的滚动方法中log一下这个数组,看看有没有东西,有的话,log一下当前的item,看看地址是否一致

liangdrime avatar Aug 27 '16 07:08 liangdrime

我在ios9上试了下,是可以的,之前是跑到ios10上了,可能ios10不能对同一个对象添加多次observer?

ab2a3fb2-d1f9-4dde-a326-c6d18fcdbfab

CoderJackie avatar Aug 27 '16 07:08 CoderJackie

这样子啊。我这个还没有兼容iOS10。如你所说的话,iOS10是对kvo做了优化了,之前的kvo是可以随便添加移除(而且,添加几次就得移除几次)。这样优化之后其实更好一点。 谢谢你的反馈啊😃

liangdrime avatar Aug 27 '16 07:08 liangdrime

这个并不是添加观察的问题。 在iOS10中,苹果对UICollectionView进行了优化,使之更流畅,减少卡顿现象。因此,iOS10采用了预处理机制,当用户快速切换cell,然后马上又滑到之前的cell,UICollectionView并不会调用cellforitem实现重用,而是对之前的cell做了保留直接调用了willDisplayCell的方法。官方视频

这里,去掉了UICollectionView的预处理功能 collecitonView.prefetchingEnabled = NO; 新的提交已经支持iOS10。

liangdrime avatar Sep 17 '16 08:09 liangdrime