JXSegmentedView icon indicating copy to clipboard operation
JXSegmentedView copied to clipboard

手指慢慢拖动切换 listDidAppear不会执行

Open zhangtong99 opened this issue 2 years ago • 3 comments

zhangtong99 avatar Aug 29 '22 05:08 zhangtong99

我被这个坑了几天了,不知道是不是类似问题,主要就是滑动切换,没有进行 去更新JXPagingListContainerView.swift中,didClickSelectedItem操作(点击和代码切换都有):

public func didClickSelectedItem(at index: Int) {
    guard checkIndexValid(index) else {
        return
    }
    willAppearIndex = -1
    willDisappearIndex = -1
    if currentIndex != index {
        listWillDisappear(at: currentIndex)
        listWillAppear(at: index)
        listDidDisappear(at: currentIndex)
        listDidAppear(at: index)
    }
}

问题代码:

JXSegmentedView.swift中: if index == selectedIndex { if selectedType == .code { listContainer?.didClickSelectedItem(at: index) }else if selectedType == .click { delegate?.segmentedView(self, didClickSelectedItemAt: index) listContainer?.didClickSelectedItem(at: index) }else if selectedType == .scroll { delegate?.segmentedView(self, didScrollSelectedItemAt: index) //这里拖动缺少:listContainer?.didClickSelectedItem的操作,为什么呢?我是加上就好了。不改源码的话,可以在上面方法外调用一下:listContainer?.didClickSelectedItem //我的场景是每次会更新listContainer的高度,因为底部内容过少主Cell就不必要那么高垂直滚动。 } delegate?.segmentedView(self, didSelectedItemAt: index) scrollingTargetIndex = -1 return }

可以外部实现delegate修一下: func segmentedView(_ segmentedView: JXSegmentedView, didScrollSelectedItemAt index: Int) { //修正滑动切换,内部不更新listContainer内索引?导致混乱 segmentedView.listContainer?.didClickSelectedItem(at: index) }

thomashooo avatar Nov 08 '22 15:11 thomashooo

持续研究了一下,最终导致问题的是 scrollViewDidScroll中调用listDidAppearOrDisappear方法无法触发为,下一页。落到scrollViewDidEndDecelerating去执行了取消滑动了。。。

thomashooo avatar Nov 13 '22 02:11 thomashooo

参考这个解决:https://github.com/pujiaxin33/JXSegmentedView/issues/204 添加:scrollView.isDecelerating 状态检测。

thomashooo avatar Nov 13 '22 03:11 thomashooo

已修复,via https://github.com/pujiaxin33/JXSegmentedView/pull/201

pujiaxin33 avatar Jul 09 '24 06:07 pujiaxin33