JXPagingView
JXPagingView copied to clipboard
JXPagerListContainerViewController计算出来的生命周期在手指切换的时候是错误的
bug提交前阅读 1.请先仔细阅读文档,尤其是【其他注意事项】文档,里面有常见问题的解决方案; 2.请先搜索已有的Issues,尝试找到相同问题的讨论; 3.请先阅读相关类的API、源码,尝试从源码找到答案; 4.如果以上步骤都未能解决你的疑问,欢迎提交ISSUE;
bug描述 生命周期在用手指切换tab的时候全部错误了
以下两段代码计算生命周期有问题,而且是必现的,我尝试修复,短时间解决不了,麻烦作者给点思路或者给修复下
-
(void)scrollViewDidScroll:(UIScrollView *)scrollView { ...... [self listDidAppearOrDisappear:scrollView]; }
-
(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { // NSLog(@"2222222"); if (self.willDisappearIndex != -1) { [self listWillAppear:self.willDisappearIndex]; [self listWillDisappear:self.willAppearIndex]; [self listDidAppear:self.willDisappearIndex]; [self listDidDisappear:self.willAppearIndex]; self.willDisappearIndex = -1; self.willAppearIndex = -1; } if (self.delegate && [self.delegate respondsToSelector:@selector(listContainerViewWDidEndScroll:)]) { [self.delegate listContainerViewWDidEndScroll:self]; } }
版本号 1.JXPagingView版本号:2.0.12 2.OC还是Swift版本 OC 3.手机系统版本号:13.6.1 4.手机型号:iphone xs max
复现步骤
- 遇到问题的相关效果、类是:JXPagerListContainerView 2.具体的操作步骤是:比如作者的Demo,第一个例子打开,正常下面三个tab,你左右切换,或者点头部切换都是没问题,生命周期都是正常的,但是如果你能力tab切换到爱好tab,切过去的时候手指一直按照不松开,也就是手指拖动整个屏幕宽度的距离,等切换到第二个tab的时候,生命周期调用的是前一个tab的,以下代码会出问题吗,整个生命周期就混乱了。
截图、GIF 提供bug出现时的截图或者GIF。

可以看到已经用手指切换到了第二个tab,但是你看下面回调的生命周期是错误的,下表是0
`- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
if (self.willDisappearIndex != -1) {
CGFloat currentIndexPercent = scrollView.contentOffset.x/scrollView.bounds.size.width;
NSInteger disappearIndex = self.willDisappearIndex;
NSInteger appearIndex = self.willAppearIndex;
if (self.willAppearIndex > self.willDisappearIndex) {
if (currentIndexPercent >= (self.willAppearIndex)) {
NSLog(@"EEEEEEEEEEEEEE");
[self listWillAppear:appearIndex];
[self listWillDisappear:disappearIndex];
[self listDidAppear:appearIndex];
[self listDidDisappear:disappearIndex];
self.willDisappearIndex = -1;
self.willAppearIndex = -1;
}else{
[self listWillAppear:disappearIndex];
[self listWillDisappear:appearIndex];
[self listDidAppear:disappearIndex];
[self listDidDisappear:appearIndex];
self.willDisappearIndex = -1;
self.willAppearIndex = -1;
}
}else {
if (currentIndexPercent <= (self.willAppearIndex)) {
NSLog(@"FFFFFFFFFFFFFFFFF");
[self listWillAppear:appearIndex];
[self listWillDisappear:disappearIndex];
[self listDidAppear:appearIndex];
[self listDidDisappear:disappearIndex];
self.willDisappearIndex = -1;
self.willAppearIndex = -1;
}else{
[self listWillAppear:disappearIndex];
[self listWillDisappear:appearIndex];
[self listDidAppear:disappearIndex];
[self listDidDisappear:appearIndex];
self.willDisappearIndex = -1;
self.willAppearIndex = -1;
}
}
}
if (self.delegate && [self.delegate respondsToSelector:@selector(listContainerViewWDidEndScroll:)]) {
[self.delegate listContainerViewWDidEndScroll:self];
}
}` 我直接在这个方法这样写了,我没有看得很细,您看下是否就可以,我看你的代码是直接不管就回滚到之前的index,我这边做了判断,看下是否可以,我目前看来生命周期就正常了,看你是否可以优化下,修复这个Bug,生命周期对我来说太重要了,我可能考虑不全,麻烦您看下
我也遇到这个问题了,手指拖到到快要完全切换的时候松开就会出现,导致vc的viewDidAppear和viewDidDisappear完全乱了,非常致命
你能在iOS14.2系统复现吗?
手动滑,来回切,生命周期完全是乱的,作者大大应该没时间修复了,自己改改吧 @yautou
@DeftMKJ 方便贴一下你修改的代码吗?我还没有复现出来
很容易复现出来,快速滑动就会出现, 崩溃