kingjiajie / JJCollectionViewRoundFlowLayout_Swift

JJCollectionViewRoundFlowLayout_Swift是JJCollectionViewRoundFlowLayout(OC:https://github.com/kingjiajie/JJCollectionViewRoundFlowLayout )的Swift版本,JJCollectionViewRoundFlowLayout可设置CollectionView的BackgroundColor,可根据用户Cell个数计算背景图尺寸,可自定义是否包括计算CollectionViewHeaderView、CollectionViewFootererView或只计算Cells。设置简单,可自定义背景颜色偏移,设置显示方向(竖向、横向)显示,不同Section设置不同的背景颜色,设置Cell的对齐方式,支持左对齐,右对齐,居中。
MIT License
73 stars 13 forks source link

你好,为什么JJCollectionViewDelegateRoundFlowLayout_Swift这个协议的方法没有走到 #2

Closed simpleLiYu closed 2 years ago

simpleLiYu commented 3 years ago

image 我这个方法并没有调用会是什么原因呢

kingjiajie commented 3 years ago

image 我这个方法并没有调用会是什么原因呢

你好,你可以提供一下你初始化的方法么?

simpleLiYu commented 3 years ago

image

kingjiajie commented 3 years ago

你好,初始化collectionView的时候, 需要设置
collectionView.delegate = self; collectionView.dataSource = self;

内部逻辑才能判断到协议是否实现哦。

simpleLiYu commented 3 years ago

image 设置了这两个的呢

kingjiajie commented 3 years ago

image 设置了这两个的呢

暂时这里看没发现什么问题。你试试在func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 里 看看collectionViewLayout是什么类型的? 设置了delegate的话,是会走判断的。如果都不行的话,方便告诉一下您的collectionView还集成了哪些其他的第三方的库呢? 我发现在你发的代码中有些方法是原生没有的。

simpleLiYu commented 3 years ago

image collectionView的话没有继承别的三方库,register那个是SwifterSwift对collectionview注册的一个扩展 image

kingjiajie commented 3 years ago

image collectionView的话没有继承别的三方库,register那个是SwifterSwift对collectionview注册的一个扩展 image

因为暂时来看,设置了delegate之后,collectionView准备显示时走prepare()判断,按照以上你提供的代码我没看出来问题在哪里呢,如果是这样的话,方便提供一下你的一个demo么。

simpleLiYu commented 3 years ago

我知道了,我用了rxswift监听页面滑动导致 image 这个类型不对

kingjiajie commented 3 years ago

我知道了,我用了rxswift监听页面滑动导致 image 这个类型不对

我看了我的代码,这个guard let,应该不是我这边判断的,那你的问题找到解决方案了么?

simpleLiYu commented 3 years ago

你有这个guard let的, 我把rx的换了。。。就正常了,暂时还不知道别的解决方法

kingjiajie commented 3 years ago

你有这个guard let的, 我把rx的换了。。。就正常了,暂时还不知道别的解决方法

请问你用的版本是哪一个版本呢? 我在现在2.4.0上没有找到以上你发的那个 guard let 哦。

simpleLiYu commented 3 years ago

那可能是我改了

kingjiajie commented 3 years ago

那可能是我改了

WeChat9b1d3e182cc020c6290d3951a7ad58bf

嗯嗯,应该是您那边修改了,我在我现在最新版本的项目中全局搜索,暂时没找到对应代码。

simpleLiYu commented 3 years ago

对,我把几个判断合并了是我改了 image image

kingjiajie commented 3 years ago

对,我把几个判断合并了是我改了 image image

那如果按照这个情况的话,我 建议不做将 let delegate = collectionView?.delegate as ? JJColletionViewDelegateRoundFliwLayout_Swift 这个判断,然后继续使用rxSwift应该是可以的。

simpleLiYu commented 3 years ago

image

kingjiajie commented 3 years ago

OK,我看看如何适配一下使用Rx后的这个问题。

kingjiajie commented 3 years ago

你好,根据我使用rx,检测collectionView的contentOffset,prepare()时,layout.collectionView.delegate 变成了RxCollectionViewDelegateProxy。我代码上判断是强制拆包,的确不怎么好。 不过如果变成了RxCollectionViewDelegateProxy,根据判断,进行拆包后,RxCollectionViewDelegateProxy 内有forwardToDelegate() 或 _forwardToDelegate 可以获取到真实的delegate,使用真实的delegate就可以继续往下执行了。 我暂时找到的解决方案是这个,不过判断的话有点多,我暂时没在项目中更新,后续看看怎么操作。 现在可以先使用该临时解决方案。

simpleLiYu commented 3 years ago

好的,我先按照这样修改下。刚开始弄rx不会

kingjiajie commented 3 years ago

好的,我先按照这样修改下。刚开始弄rx不会

还有一个方案就是,如果觉得以上的判断太麻烦的话,我用rx监测collectionView的contentOffset的时候,只是delegate被改变了,dataSource没有改变,还是真实delegate, 判断如果delegate不对之后用dataSource,我扫描了我的代码,有四处对delegate的判断,分别在flowlayout和utils里面。

如果有什么问题,可以回复,我看看如何解决。