是否可以添加拖动以水平重新加载集合视图?

Posted

技术标签:

【中文标题】是否可以添加拖动以水平重新加载集合视图?【英文标题】:Is it possible to add a drag to reload horizontally for a collection view? 【发布时间】:2019-06-15 21:31:19 【问题描述】:

更新:

鉴于苹果文档中的以下行,我相信这可能是不可能的:

当用户向下拖动可滚动内容区域的顶部时

Found here.

让我知道是否有办法做到这一点。


我正在努力做到这一点,以便当用户在集合视图中向左滑动(在许多应用程序中向上滑动以重新加载 tableViews 的方式)时,它将显示一个加载图标并重新加载数据(重新加载数据部分我可以自己处理)。

如何检测到这一点以便调用reloadData() 方法?

注意:我使用的是UICollectionView,它只有一列和 x 行。如果用户向左滑动,则在第一个单元格处应显示加载图标并重新加载数据。

我正在寻找一种方法来检测要重新加载的左侧幻灯片。

我尝试过的:

    let refreshControl = UIRefreshControl()

override func viewDidLoad() 
    super.viewDidLoad()
    viewDidLoadMethods()
    refreshControl.tintColor = .black
    refreshControl.addTarget(self, action: #selector(refresh), for: .valueChanged)
    collectionView.addSubview(refreshControl)
    collectionView.alwaysBounceHorizontal = true

但这仅适用于垂直方向。

【问题讨论】:

UIRefreshControl on UICollectionView only works if the collection fills the height of the container的可能重复 @jsbeginnerNodeJS 这个问题涵盖了一个问题,我的没有。我正在寻找有关如何检测此问题的指导... 看答案。 @jsbeginnerNodeJS 所有答案都显示了如何垂直地做到这一点 【参考方案1】:

我用以下方法解决了这个问题,但我应该注意,没有像垂直刷新那样的默认功能:

 func scrollViewDidScroll(_ scrollView: UIScrollView) 
    let offset = scrollView.contentOffset
    let inset = scrollView.contentInset
    let y: CGFloat = offset.x - inset.left
    let reload_distance: CGFloat = -80

    if y < reload_distance
        shouldReload = true
    


func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) 
    if let _ = scrollView as? UICollectionView 

        currentlyScrolling = false

        if shouldReload 
            baseVC.showReloading()
            reloadCollectionView()
        
    
 

【讨论】:

以上是关于是否可以添加拖动以水平重新加载集合视图?的主要内容,如果未能解决你的问题,请参考以下文章

**防止在水平滚动视图内拖动两个 CollectionView **

在堆栈视图内具有堆栈视图的水平集合视图在重新加载动画时隐藏内部堆栈视图

数据重新加载时 iOS 集合视图上移

从集合视图重新加载数据时的多个视图

滚动和拖动单元格时集合视图抛出异常

如何自动重新加载集合视图?